Italian estrarre singoli record da una lista

lelelor

Member
Licensed User
Buongiorno, riesco a creare una lista in un file con i campi divisi da una virgola ma poi non riesco ad estrarre i record singolarmente

in allegato il contenuto del file

vorrei estrarre riga per riga i record e dal record ottenere i dati

trovo il numero di record contenuti nel file, ma non so come analizzare una riga alla volta e separare i campi

so che sarà una banalità ma...

Grazie
Gabriele
 

Attachments

  • Immagine 2022-06-04 104541.jpg
    Immagine 2022-06-04 104541.jpg
    12.3 KB · Views: 84

sirjo66

Well-Known Member
Licensed User
Longtime User
Buongiorno, riesco a creare una lista in un file con i campi divisi da una virgola ma poi non riesco ad estrarre i record singolarmente

in allegato il contenuto del file

vorrei estrarre riga per riga i record e dal record ottenere i dati

trovo il numero di record contenuti nel file, ma non so come analizzare una riga alla volta e separare i campi

so che sarà una banalità ma...

Grazie
Gabriele

Ciao Gabri,
non te la prendere per @Star-Dust è uno tra i più bravi qui, sempre disponibile e preparatissimo, molto disponibile, ma a volte anche buontempone e scherzoso, per cui la sua voleva solo essere una risposta per riderci su.

Tornando a noi:
come fai a trovare il numero di record contenuti nel file ?
mostra un po' di codice di quello che hai fatto per leggere il file e ottenere il numero dei record, poi vediamo come aiutarti

Altra cosa: il file lo crei tu da codice o da altre fonti ?
Se lo crei tu ti consiglio di non utilizzare la virgola per la divisione dei campi ma il tabulatore (carattere Tab) poichè se un domani devi inserire nei campi una stringa che contiene una virgola sei fregato.
Dovresti quindi creare un parser per leggere correttamente il valore ma non ne vale la pena.

Sergio
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Si è perso il senso del humour ;)

@lelelor nessuno ti (le) può aiutare se non posti un po di codice, un esempio e magari un file che vuoi elaborare (in formato testo non immagine)

Comunque se vuoi (vuole/vorrebbe) dividere una stringa in tante spezzandole alla virgola (o altro carattere) usa il Regex, come consigliato da poco in un precedente post

PS per leggere una riga alla volta un file di testo o lo suddividerei per CRLF o meglio userei il file.ReadList..... ai poster l'ardua sentenza come disse Seneca (o era Willi il coyote?)
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Beh ho ricevuto un po di complimenti da @sirjo66 è @Xfood ... Per bilanciare il tutto mi arriverà un meteorite addosso oggi
 

Star-Dust

Expert
Licensed User
Longtime User
Per @Star-Dust : che sistema operativo è Winrdows ??
Come il DR-Dos era il fratello bizzarro di MS-Dos c'è il WinRdows che è la versione di Windows in un altra dimensione
 
Last edited:

Sagenut

Expert
Licensed User
Longtime User
@lelelor
Supponendo che popoli una List leggendo il tuo file con un File.ReadList........
B4X:
Dim item() as String
Item = Regex.Split(",", MiaLista.Get(0))
Log("Prima parte: " & item(0))
Log("Seconda parte: " & item(1))
Log("Terza parte: " & item(2))
Se posti anche il tuo codice attuale o un progettino di esempio sarà possibile per tutti aiutarti meglio.
 

lelelor

Member
Licensed User
Bhe la mia ignoranza ha contribuito a "fare gruppo" e mi faccio carico di non avere colto l'ironia

ora ho capito il perche' del "|" come separatore di campi ed utilizzerò questo

non ho ancora guardato l'esempio di Lucas, che comunque guarderò

di seguito posto il "metodo" e la stringa con cui memorizzo il mio dato
Code:
lst.add ("5" & "|" & t_descr.Text &"|" & t_prezzo.Text & Chr(13) & Chr(10))

ModMyutils.WriteListForWindows(dir, filename, lst)

</>

qui posto il codice con cui leggo il file, il problema è che non so come prendere il singolo campo del singolo record
B4X:

Dim lst As List
Dim pluto As String
lst = File.ReadList(dir,filename)
Dim pippo As Int
Dim t As Int

pippo=lst.Size -1

For t=0 To pippo
pluto=lst.Get(t)

Dim words() As String = Regex.Split("|", pluto)
' Log(words)
For Each Word As String In words
If t=0 Then Button1.Text=Word.SubString2(0,2)
If t=1 Then Button2.Text=Word.SubString2(0,2)

Log(Word)
Next
Next

<\>

sperando di avere rispettato lo schema per postare Vi ringrazio per la pazienza


Gabriele
 

Sagenut

Expert
Licensed User
Longtime User
Gli elementi della tua lista sono tutti formati dallo stesso numero di pezzi (3 nel tuo esempio) o possono essere variabili?
Non ho guardato l'esempio di @LucaMs ma credo che con quello e le info che trovi nella discussione risolverai il problema.
Il tuo codice era quasi a posto.
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
B4X:
For t=0 To pippo
   pluto=lst.Get(t)

   Dim words() As String = Regex.Split("|", pluto)
   ' per leggere i singoli dati:
   Dim primovalore As String = words(0)
   Dim secondovalore As String = words(1)
   Dim terzovalore As String = words(2)
Next

P.S.: quando devi inserire del codice o premi il pulsante </> e compili il form relativo, oppure devi racchiudere il codice tra il tag CODE

Devi racchiudere il tag tra le parentesi quadre.
quindi, premi il tasto [ poi di seguito scrivi CODE e quindi il tasto ]
scrivi il tuo codice
infine il tag /CODE anch'esso racchiuso tra parentesi quadre
 
Last edited:

lelelor

Member
Licensed User
B4X:
For t=0 To pippo
   pluto=lst.Get(t)

   Dim words() As String = Regex.Split("|", pluto)
   ' per leggere i singoli dati:
   Dim primovalore As String = words(0)
   Dim secondovalore As String = words(1)
   Dim terzovalore As String = words(2)
Next

P.S.: quando devi inserire del codice o premi il pulsante </> e compili il form relativo, oppure devi racchiudere il codice tra il tag CODE

Devi racchiudere il tag tra le parentesi quadre.
quindi, premi il tasto [ poi di seguito scrivi CODE e quindi il tasto ]
scrivi il tuo codice
infine il tag /CODE anch'esso racchiuso tra parentesi quadre
buongiorno, grazie mille, la prossima volta farò così
 

lelelor

Member
Licensed User
mi sono accorto che non memorizza con INVIO

Memorizzo record:
lst.add (t_codice.text & "|" & t_descr.Text &"|"  &  t_prezzo.Text & Chr(13) & Chr(10))
    
    ModMyutils.WriteListForWindows(dir, filename, lst)

quindi quando vado a leggere i record non me li suddivide
scusate ma da autodidatta ci metto tanta testa ma la logica di b4a è un pò diversa da vb6 (imparato sempre da autodidatta)

@Star-Dust scusa ma a volte quando si è concentrati su cose che non conosci potresti anche non capire lo spirito dei commenti ...

grazie ancora
 

Sagenut

Expert
Licensed User
Longtime User
Last edited:
Top