Riuovere individuare parte di una stringa ( access VBA)

martedì 18 marzo 2014 - 06.00
Tag Elenco Tags  Access (.mdb)

leoobelix Profilo | Newbie

sto sbattendo la testa e non trovo la soluzione

se qualcuno mi indica la strada


ho una stringa complessa , ripulita da vari caratteri che non mi serve
( con i vari replace etc... ) ma mi trovo ad un punto che non riesco a rivolvere

esempio

testo1 ,abc testo2 ,ydd testo4 ,ttt testo5, 33s etc...

devo eliminare i primi 3 caratteri dopo la virgola (,)

come faccio a dirli in vba che deve prendermi i tre caratteri dopo la virgola ?

grazie ancora .

renarig Profilo | Expert

>devo eliminare i primi 3 caratteri dopo la virgola (,)
Devi usare una combinazione delle funzioni
- InStr(....,......) per trovare la posizione della PRIMA virgola
- Len(......) per trovare la lunghezza totale della stringa

Ti elimina solo i 3 caratteri dopo la 1° virgola ( lasciandoti pero la virgola )
ma se ci sono altre virgole dopo non vengono considerate

Va in errore se dopo la 1° virgola non hai almeno 3 caratteri
( questo si risolve facilmente )

Ho fatto tutti i passaggi per renderla comprensibile ma se vuoi la puoi "compattare" tutto in 1 sola riga di codice


Public Sub Virgxx() ' definiamo la nostra stringa Dim Stx As String Stx = "a123,xxxa12345,67" ' Troviamo la posizione della PRIMA virgola Dim Pos As Integer Pos = InStr(Stx, ",") ' Troviamo la lunghezza totale della stringa Dim Lex As Integer Lex = Len(Stx) ' componiamo la nuova stringa con il pezzo iniziale e finale Stx = Left(Stx, Pos) & Right(Stx, Lex - Pos - 3) MsgBox Stx End Sub

leoobelix Profilo | Newbie

e qui sta purtroppo il problema

che dici se prendo la stringa rimuovo i 3 caratteri dopo la virgola
e faccio un ciclo su nuovo testo ?

renarig Profilo | Expert

>e qui sta purtroppo il problema


Non ho capito dove sta il problema ??
Nel fatto che potrebbero esserci piu virgole nel testo originale ??

leoobelix Profilo | Newbie

e si

ti rimando l'esempio
inizio :

testo1 ,abc testo2 ,ydd testo4 ,ttt testo5, 33s etc...

applicando il codice da te inviato funziona perfettamente su la prima vigola
ma il problema si ripropone alla seconda e terza e cosi via .

dopo avro :
testo1 , testo2 ,ydd testo4 ,ttt testo5, 33s etc...

1) pensavo : sostituisco la prima virgola con un altro carattere e uso il tuo codice in ciclo
esempio : testo1 \ testo2 ,ydd testo4 ,ttt testo5, 33s etc...
2) non lo so e ci devo ancora pensare :))

renarig Profilo | Expert


pero non ho capito in efetti cosa devi fare
immaginiamo che hai questi dati:

1234,12345687
derg,kjdfer,hertgs
sss,
dfer,fghyt,
hgdfr, gdert
,
123,,123456
hdert, kjhdf, 123456,kjhdter

scrivici i risultati che vuoi ottenere

leoobelix Profilo | Newbie

la storia e' lunga


mi tiro giu una pagina web in formato testo
elimino tutti i caratteri che non mi servono
inserisco un delimitatore ( virgola)
splitto il tutto e mando in tabella

una lista di prodotti delimitati da una virgola

esempio :

bullone , 8 cacciavite ,ee trapano, 154 vitexyz , gg etc....

sempre dopo la virgola mi trovo qualcosa


quando mando in tabella

mi trovo :

bullone ,
8 cacciavite
ee trapano
154 vitexyz
gg etc....


le strade che pensavo erano due

1) quella che ho messo in forum
cioe rimuovere con un ciclo dopo la virgola 3 caratteri

2) quella che meno piace
fare una query sulla tabella ed eliminare i primi 3 caratteri e poi un trim
in modo da pulire
(problema che mi gioco il primo record , in quanto non inizia con la virgola.
3) aggiongere 3 caratteri all inizio della mia stringa
in modo da uniformare tutto lo standard e mandarlo in tabella ...poi query etc...

che pensi ?

renarig Profilo | Expert

>che pensi ?
2° e 3° anche se concetualmente semplici ti richiedono delle query che potresti evitare

la 1 soluzione è piu simpatica:

Ricapitolando:
hai questa stringa che NON inizia con virgola e NON finisce con virgola

tu vuoi
- rimuovere i primi 3 caratteri dopo TUTTE le virgole
- rimuovere anche le virgole ( quindi i caratteri sono 4 )
- dare un "a capo" al posto di ogni virgola
- mettere il tutto in 1 tabellina che sara composta
da tanti record quante sono le virgole + 1


Ho interpretato bene ??

quindi praticamente
-- da questo bullone ,123cacciavite ,xyztrapano,154vitexyz ,gg etc.... ,marcellino -- vuoi ottenete questo bullone cacciavite trapano vitexyz etc.... cellino

Giusto?

.

leoobelix Profilo | Newbie

ricapitolo

- rimuovere i primi 3 caratteri dopo TUTTE le virgole = ESATTO
- rimuovere anche le virgole ( quindi i caratteri sono 4 ) = NO , mi servono per lo split che faccio dopo (altrimenti mi perdo il delimitatore)
- dare un "a capo" al posto di ogni virgola = NO
- mettere il tutto in 1 tabellina che sara composta = GIA fatto

devo solo riuscire a rimuovere questi 3 caratteri dopo la virgola per tutte le virgole della stringa

grazie ancora .

renarig Profilo | Expert

>devo solo riuscire a rimuovere questi 3 caratteri dopo la virgola
>per tutte le virgole della stringa

allora è facile
dopo provo a mandarti qualche esempio di codice ciclico
.

leoobelix Profilo | Newbie

grazie ancora !

renarig Profilo | Expert

Forse questo si avvicina
Public Sub Virgxx02() ' definiamo la nostra stringa Dim Stx As String Stx = "1234,aaa12345,vvv123456, 1234567,d d12345678" Dim Pox As Integer ' la posizione della virgola considerata Dim Lex As Integer ' la lunghezza totale della stringa Dim Vax As Integer ' La parte di stringa gia valutata Vax = 1 Inizio: ' Il ciclo inizia qui If InStr(Vax, Stx, ",") = 0 Then GoTo Fine ' se sono finite le virgole va alla chiusura Pox = InStr(Vax, Stx, ",") Lex = Len(Stx) Stx = Left(Stx, Pox) & Right(Stx, (Lex - Pox - 3)) ' <- qui decidi quati caratteri togliere Vax = Pox + 1 GoTo Inizio ' il ciclo finisce qui e ritorna all'inizio Fine: MsgBox Stx End Sub

Dopo ogni virgola DEVONO esserci almeno 3 caratteri
- Và in errore se dopo l'ultima virgola non ci sono almeno 3 caratteri
- mentre se fra 2 virgole intermedie non ci sono almeno 3 caratteri restituisce dei valori senza senso

Facci sapere

.

leoobelix Profilo | Newbie

PERFETTO , la sto testando e non mi da nessun problema , grazie ancora
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5