French lire et écrire texte "csv" ligne par ligne

fgh3966

Active Member
Licensed User
Bonjour

j'arrive a lire un fichier csv ou bien texte qui me donne ce qui suit

contenu de la string:
TheDate = "002,02, To Do 2,0-399.9        ,OK2,4,@ 003,00,TRACK TIME   ,0-399.9        ,TMP,5,@    003,02,TRACK TIME,0-399.9        ,TMP,6,@    004,00,TITLE  ,0-99900        ,DIR,7,@"

Mais je voudrais charger dans une string le texte ligne par ligne.
Chaque fois que la string serait traitées on chargerait la ligne suivante dans la string, et ainsi de suite jusqu'a la fin du fichier texte ou csv.

J'ai trouvé l'instruction substring2 et regex.Split
L'instruction regex.Split est pratique.

Si vous conaissez un exemple ?

Merci d'avance
 
Last edited:

zed

Active Member
Licensed User
Salut,
Tu peux faire ça pour lire une ligne à la fois

B4A:
Dim Reader As TextReader
Reader.Initialize(File.OpenInput(File.DirInternal, "FileName.csv"))
Dim line As String
line = Reader.ReadLine
Do While line <> Null
    Log(line)
    line = Reader.ReadLine
Loop
Reader.Close

Pour écrire
 
Last edited:

fgh3966

Active Member
Licensed User
Bonjour

Finallement j'ai écris ces lignes car ce code est issu du code de la précédente question sur mon précédent thread dans le forum.

On a donc de la chaine de caratères :
chaine string:
Thedate = "002,02, To Do 2,0-399.9        ,OK2,4,@ 003,00,TRACK TIME   ,0-399.9        ,TMP,5,@    003,02,TRACK TIME,0-399.9        ,TMP,6,@    004,00,TITLE  ,0-99900        ,DIR,7,@"

Et ce code pour retrouver le début de la chaine de caratères

retrouver debut chaine via caractères "@":
 ...   debligne = Thedate.IndexOf("@")
    labelstring = Thedate.substring2(0,debligne) '"fin de ligne OK" 'Parsed(0)
    Log (Thedate)
    Log (labelstring)
    Label1.text = labelstring
...

L'origine de la string est un fichier csv ou texte
Chaque ligne termine par le caractère "@" , on peut mettre ce caractère au "@" au début, d'ailleurs j'aimerais ne pas devoir utiliser cet artifice.
Il faudrait que quand on crée un évènement (par exemple click boutton) la string passe à la ligne suivante.

départ de la string >>> 002,02, To Do 2,0-399.9 ,OK2,4,@ >>> click boutton (évenement)
mise a jour de la string >>> 003,00,TRACK TIME ,0-399.9 ,TMP,5,@ >>> click boutton (évènement)
mise à jour de la string >>> 003,02,TRACK TIME,0-399.9 ,TMP,6,@ >>> click boutton (évènement)
mise à jour de la string >>> 004,00,TITLE ,0-99900 ,DIR,7,@ >>> etc...

Je cherche comment mettre à jour une string a partir d'un fichier

Merci d'avance.
 

zed

Active Member
Licensed User
Il faudrait que quand on crée un évènement (par exemple click boutton) la string passe à la ligne suivante.
Essayes ceci pour voir si j'ai bien compris ta question.
Quand tu cliques sur le bouton Next, il lit la ligne suivante.
B4A:
private Sub readLineCSV
    Dim Reader As TextReader
    Reader.Initialize(File.OpenInput(File.DirAssets, "string.csv"))
    Dim line As String
    line = Reader.ReadLine
    list.Add(line)
    Do While line <> Null
        line = Reader.ReadLine
        list.Add(line)
    Loop
    Reader.Close
End Sub

Private Sub btNext_Click
    If list.Get(0) <> Null Then
        lblLine.Text = list.Get(0)
        Sleep(0)
        list.RemoveAt(0)
    Else
        Return
    End If
End Sub
Tout dans le zip
 

Attachments

  • StringCSV.zip
    9.5 KB · Views: 60

fgh3966

Active Member
Licensed User
Bonjour

Le truc c'est que la soure du csv ou texte (comme on voudras) provient d'un textfield, aussi le programme en développement (zip joint) dispose déjà de la fonction que va lire un fichier.
Je n'arrive pas a faire le lien entre ce programme (fichier zip joint) et les lignes de code que tu me propose.
En tout cas merci.
 

Attachments

  • TextEditorV5.zip
    13.8 KB · Views: 56

zed

Active Member
Licensed User
J'ai intégré le code.
Je ne sais pas vraiment ce que tu veux faire avec ton app. Si ce n'est pas ce que tu veux, dis-le moi.
Tu déclares la variable "Thedate as string" et tu utilises un délimiteur "@"
Tu dois utilisé une liste pour ça. Plus besoin de délimiter la string.
Elle sert à quoi cette variable "Thedate".
 

Attachments

  • TextEditor.zip
    13.9 KB · Views: 63

fgh3966

Active Member
Licensed User
Bonsoir

La variable thedate c'est pour simuler la string lue par le programme Texteditor, bref quand on lit le fichier texte qui va se charger dans une string (c'est ce que j'ai compris)

Encore MERCI.
Bonne soirée.
 

fgh3966

Active Member
Licensed User
Bonjour

Je ne sais pas s'il faut démarrer une autre discussion ?
Suite à l'exemple qu'on m'a fait parvenir ici , Il faudrait qu'une ou plusieurs colones du fichier csv soient affectées à une ou plusieurs listview(s).
A priori les customlistview (CLV) ont la côte ... ;)
Quelle(s) fonction(s) faudrait il regarder ?
Est ce qu'elles pourraient trier les valeurs des listview ?

Merci d'avance.
 

zed

Active Member
Licensed User
Salut,
Je suppose que dans ton csv, tu définis tes colonnes avec un séparateur ( "," ou ";)
Dans ce cas, utilise la commande Split. Tu auras en sortie un Array.
Par example .
B4X:
Dim myString() As String
myString = Regex.Split("SEPARATEUR", "LigneDuCSV")

Dim myList1 As List
Dim myList2 As List
myList1.Initialize
myList2.Initialize
For i = 0 To myString.Length -1
    myList1.Add(myString(0))
    myList2.add(myString(1))
Next

Ensuite, avec les "list", tu remplis ton clv
Maintenant, si tu veux trier les "List" avec des paramètres, il faut utiliser un "Type". C'est un peu plus compliqué.
 
Last edited:

fgh3966

Active Member
Licensed User
Merci de ta réponse.
Je suis entrains de voir comment extraire les lignes et colones du fichier cdv avec le code que tu m'avais fais parvenir pour lire un fichier csv.
il faudra sûrement utiliser Regex.Split("SEPARATEUR", "LigneDuCSV"), le séparateur est bien la virgule, je cherche a identifier la ligne.
J'ai mis en place une variable qui compte le nombre de lignes
Je te tiens au courant.
 
Top