Newsgroup: it.comp.lang.visual-basic
Titolo: "Tagliare" le stringhe (lungo, con 2 esempi)

Ciao, sono ancora qua :)
Ho un dubbio di questo tipo. Da un file di testo leggo una riga, la
quale contiene 8 campi separati da una tabulazione. Ad esempio, cosi':
1	20.30.023	1	Coperchio cuscinetto
19	30.30.006	1	Ingranaggio Z 40	
--naturalmente, dopo "cuscinetto" c'e' una tabulazione e il resto di
seguito, ma ho tagliato la riga per non creare problemi--.
Io ho bisogno di tagliare la stringa in 2 parti, prendendo i primi 4
campi e mettendoli in una variabile PrimoCodice(Contatore) e i secondi
4 in una variabile SecondoCodice(Contatore). Contatore e' ovviamente
un indice che uso per scorrere l'array di valori letti.  Allora ho
buttato la' come soluzione --almeno provvisoria-- questa:
const Separatore = vbTab
...
   Input #fd, tmpStringa
   SecondoCodice = tmpStringa
   'tolgo fino alla quarta tabulazione
   For Contatore1 = 1 To 4
      Posizione = InStr(SecondoCodice, Separatore)
      'l'ultima stringa potrebbe avere solo il primo codice
      'e quindi rischio di non arrivare ad isolare il secondo
      If Posizione = 0 Then Exit For
      SecondoCodice = Right(SecondoCodice, Len(SecondoCodice) -
Posizione)
   Next
   PrimoCodice = Left(tmpStringa, Len(tmpStringa) -
Len(SecondoCodice))
  PrimiCodici(Contatore) = PrimoCodice
  SecondiCodici(Contatore) = SecondoCodice
  Contatore = Contatore + 1
...
Non sara' efficiente, ma per ora l'efficienza non e' un problema.
Questa soluzione funziona bene con tante stringhe, ma ogni tanto cade
in fallo. Ad esempio, se dal file leggo:
6	**	1	Coperchio scatola (Ghisa)
24	99.60.360	1	OR 3237  ( 2,62x60 )	
la mia procedura va in errore. Con alcuni debug.print, vedo che:
PrimiCodici( 5 )  : 6   **  1   Coperchio scatola (Ghisa)   
SecondiCodici( 5 ): 24  99.60.360   1   OR 3237  ( 2
e il resto "rimane" nella stringa. Tant'e' che, poi, vedo che
tmpStringa vale:
62x60 ) 
e conseguentemente
PrimiCodici( 6 )  : 62x60 ) 
SecondiCodici( 6 ): 
Se apro il file di testo col Notepad ingrandito a tutto schermo vedo
che la stringa coi 2 codici e' tutta sulla stessa linea e che non ho
un "a capo" prima di 62x60), quindi non capisco il motivo per cui la
mia procedura sbagli...
Avevo pensato che fossero gli ** che creavano dei problemi, ma cosi'
non e', perche' la riga:
6a	**	1	Coperchio scatola (Allum.)	
25	**	1	Scatola riduttore (Ghisa)	
viene interpretata bene, in quanto:
PrimiCodici( 7 )  : 6a  **  1   Coperchio scatola (Allum.)  
SecondiCodici( 7 ): 25  **  1   Scatola riduttore (Ghisa)   
Avete qualche consiglio da darmi in merito?
Grazie in ancitipo e scusate la lunghezza.
---
      Gianni "bugbarbeq" Rondinini, 25, RA, 242, 152
  VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
Opel/ECC Calibrezio EVO-III --- Kawasaki "Gas Gas" ZZ-R 1100
     ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it

   VBR - Vero Birro RomagnoloŽ, diffidate dalle imitazioni!


Avete qualche consiglio da darmi in merito?
Agh... mi sono accorto di una cosa :)
La procedura sbaglia tutte le righe che contengono una o piu' virgole.
Dunque il problema sta tutto li' :) Mi ero dimenticato che VB
interpreta la virgola in un file di testo come fine linea o, comunque,
come fine di quello da leggere con una input per infilarlo in una
variabile.
Sostituendo Input con Line Input sembra che tutto vada bene.
Scusate il post inutile =)
Saluti.


 Avete qualche consiglio da darmi in merito?
Se sei assolutamente certo che il record sia composto da n campi separati da
tabulazioni potresti leggere in una stringa l'intero record con Line Input,
quindi separare i campi con Split.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

quindi separare i campi con Split.
Si', sono assolutamente sicuro perche' il file lo genero io in un
altro programma, utilizzato altrove.
Grazie per il suggerimento.
---
      Gianni "bugbarbeq" Rondinini, 25, RA, 242, 152
  VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
 Opel/ECC Calibrezio EVO-IV --- Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD