[R] Enregistrer des données sur une même ligne d'un .txt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
achile
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mer. 09 avr. 2014 12:01
Status : Hors ligne

[R] Enregistrer des données sur une même ligne d'un .txt

#1

Message par achile »

Bonjour,

j'ai réalisé une interface afin de suivre des numéros de projets,
pour chaque projets il est possible d'ajouter un commentaire, ce dernier est enregistré dans un simple fichier texte.
L'utilisateur doit pouvoir modifier ce commentaire. j'ai écrit le code suivant qui marche très bien avec une ligne de commentaire.
MAIS lorsque je veux avoir dans l'interface 2 lignes de commentaires indépendantes je n'arrive plus à sauvegarder le premier commentaire ?
C'est uniquement le commentaire n°2 qui est sauvegardé :-(
ci-dessous la fonction de sauvegarde dans le fichier texte($chemin), une ligne pour le Commentaire1 et une ligne pour le Commentaire2
la partie StringReplace sert à retrouver le commentaire d'origine dans le fichier texte et ensuite je le modifie en lisant le control inpunt grace à GUICtrlRead,j'ai testé tout seul cette partie marche bien. mais j'arrive pas à écrire le résultat du StringReplace dans le fichier texte...

Code : Tout sélectionner

Func enregistrecommentaire()
        _FileWriteToLine($chemin,$NumeroDeLigne,StringReplace($ContenuLigne,"Commentaire1" & $Commentaire,"Commentaire1" & GUICtrlRead($InputCommentaire,Default),0,0),1)

        _FileWriteToLine($chemin,$NumeroDeLigne,StringReplace($ContenuLigne,"Commentaire2"& $Commentaire2,"Commentaire2" & GUICtrlRead($InputCommentaire2,Default),0,0),1)
        FileFlush($chemin)

FileClose($chemin)
EndFunc
 
quelqu'un voit mon erreur ?
merci par avance,
Modifié en dernier par achile le lun. 05 janv. 2015 16:28, modifié 2 fois.
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] enregistrer plusieurs données dans un fichier .txt

#2

Message par DimVar »

Bonjour,

A vue de nez, votre 2e ligne de script écrase la première.
Essayez avec le paramètre 0 au lieu de 1 dans votre function _FileWriteToLine(). Cf doc de la fonction.


Cdlt, Dimvar.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
achile
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mer. 09 avr. 2014 12:01
Status : Hors ligne

Re: [..] enregistrer plusieurs données dans un fichier .txt

#3

Message par achile »

Oui c'est juste et c'est voulu car je ne veux pas duppliquer les lignes dans mon fichier.
car une ligne du fichier texte correspond à un projet unique, donc je souhaite juste modifier des données dans une ligne.
un peu comme on modifirai des champs dans une table de données.
Par contre j'ai essayé quand même et le Commentaire1 est bien pris en compte en faisant comme ça, sauf que ça duplique la ligne, je peux peut être faire comme tu dis et ensuite effacer les lignes en trop dans le fichier texte..
je vais essayer et vous tenir au courant.
merci DimVar, d'autres propositions ?
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#4

Message par DimVar »

Dans ce cas, il vous faut concaténer les deux lignes pour une seule écriture. (ou je n'ai pas tout compris).


Cdlt, Dimvar.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#5

Message par Y01 »

Bonjour,

Je ne comprends pas l’intérêt de vouloir réécrire la première ligne lors de l'ajout du second commentaire.

Ne serais-ce pas plus pratique de n'ajouter que le nouveau commentaire au fichier ?

Comme le dis Dimvar, il suffirait dans ce cas de modifier le 1 en 0 mais uniquement pour le deuxième commentaire.

Code : Tout sélectionner

        _FileWriteToLine($chemin,$NumeroDeLigne,StringReplace($ContenuLigne,"Commentaire1" & $Commentaire,"Commentaire1" & GUICtrlRead($InputCommentaire,Default),0,0),1)

        _FileWriteToLine($chemin,$NumeroDeLigne,StringReplace($ContenuLigne,"Commentaire2"& $Commentaire2,"Commentaire2" & GUICtrlRead($InputCommentaire2,Default),0,0),[color=#FF0040][b]0[/b][/color])
Y01
achile
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mer. 09 avr. 2014 12:01
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#6

Message par achile »

Regarder la structure du .txt
n°de projet1 ! magasin ! infos ! Commentaire1 du projet 1 ! Commentaire2 du projet 1
n°de projet2 ! magasin ! infos ! Commentaire1 du projet 2 ! Commentaire2 du projet 2

ci-dessous en situation réelle:

[txt]
1235 44K Checking Engineering Dept. Sales Standard Commentaire1ok Commentaire2devis non conf
2457 44K Checking Engineering Dept. Sales Standard Commentaire1en cours Commentaire2
[/txt]
donc vous voyez que je dois mettre à jour une ligne à la fois et l'un ou l'autre des commentaires ou les deux.
peut être ma structure n'est pas bonne, pourquoi pas concaténer les commentaires à la fin mais il faudra toujours que je supprimes les anciens commentaires d'ou mon stringreplace..
je vais suivre toutes ces pistes ce soir et vous direz, merci encore.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#7

Message par mikell »

Le fichier texte n'est pas vraiment l'idéal, pourquoi pas un fichier ini ? moins de risque d'erreur, et AutoIt a toutes les fonctions pour le gérer

Code : Tout sélectionner

[n°de projet1]
magasin=...
infos=...
commentaire1=...
commentaire2=...

[n°de projet2]
magasin=...
infos=...
commentaire1=...
commentaire2=...
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
achile
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mer. 09 avr. 2014 12:01
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#8

Message par achile »

mikell a écrit :Le fichier texte n'est pas vraiment l'idéal, pourquoi pas un fichier ini ? moins de risque d'erreur, et AutoIt a toutes les fonctions pour le gérer
je ne connais pas les fichiers ini, mais cela semble prometteur également, faut que je vois qu'elle solution est la plus simple à mettre en oeuvre car il faut savoir aussi que j'alimente ce fichier texte depuis un copier/coller d'une application tiers.. :| faut voir si je peux répartir ce copier coller facilement dans le ini.


merci mikell pour m'avoir fait découvrir les fichiers .ini
(et oui je n'ai jamais étudier l'informatique moi :roll:
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#9

Message par mikell »

achile a écrit : il faut savoir aussi que j'alimente ce fichier texte depuis un copier/coller d'une application tiers..
Là faudrait savoir en détail la manière dont les données sont transférées depuis l'application dans le fichier et à quoi elles ressemblent (quel est le contenu exact de ce qui est copié-collé)
achile a écrit :et oui je n'ai jamais étudier l'informatique moi :roll:
Moi non plus ! :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#10

Message par blacksoul305 »

Bonsoir,

je suis de l'avis de mikell, les fichiers ini correspondent tout à fait à ce genre de tâches. Ils ont le mérite d'être très organisés et faciles à utiliser. J'ai écrit un tutoriel y a pas mal de temps, il est peut être pas tout à fait précis mais il présente les fonctions pour la gestion des .ini. J'espère que ça pourra t'aider.

Bonne soirée !
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#11

Message par mikell »

ça dépend... si le copier/coller fournit une chaine de type
n°de projet1 ! magasin ! infos ! Commentaire1 du projet 1 ! Commentaire2 du projet 1
les 2 démarches sont possibles :
- écrire la chaine direct dans un fichier txt ou csv (facile) mais il faudra parser à la lecture et bricoler pour faire des manipulations, plus compliqué avec risque élevé d'erreur
- parser la chaine avant écriture dans un fichier ini (ou sqlite si c'est gros) mais la lecture et les manips éventuelles seront ensuite très faciles et bien plus sûres
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#12

Message par blacksoul305 »

Au départ je pensais aussi à l'idée du séparateur et dans ces cas là, prendre la ligne et la découper avec StringSplit aurait suffit. Maintenant admettons le caractère en question est utilisé dans un commentaire ou autre, la fonction ne passe plus.
Problème largement évité avec la structure du fichier.ini.
Faut qu'achile choisisse la solution la plus adaptée.
Étudiant en 2ème année de Licence Informatique.
achile
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mer. 09 avr. 2014 12:01
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#13

Message par achile »

[quote="mikell"]ça dépend... si le copier/coller fournit une chaine de type
n°de projet1 ! magasin ! infos ! Commentaire1 du projet 1 ! Commentaire2 du projet 1

En fait c'est même pire car le copier/coller ne founit même pas les commentaires, c'est une option qui j'ai ajouté afin
de pouvoir commenter mes projets et ajouter des notes, des rappels.. bref laisser un commentaire quoi :mrgreen:

Je vais essayer de faire concaténer car cela m'éviterais de recoder certaines fonctions que j'ai déjà fait mais sinon je reste tenter de faire le fichier .ini car c'est sympa aussi.
Si je m'en sors rapidement et si je suis vraiment chaud j'essaierai les deux façons.

je vais partir en vacances et serait de retour l'année prochaine, je n'aurais pas internet dans l'intervalle.
je viendrais vous dire quand fini.

Merci encore à tous,
achile
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mer. 09 avr. 2014 12:01
Status : Hors ligne

Re: [..]enregistrer des données sur une même ligne d'un .txt

#14

Message par achile »

blacksoul305 a écrit :Au départ je pensais aussi à l'idée du séparateur et dans ces cas là, prendre la ligne et la découper avec StringSplit aurait suffit. .
en fait pour retrouver mes données je lis la ligne du fichier texte ;
je la mets dans un array
et ensuite je vais lire au bon endroit pour alimenter un affichage GUI()

Code : Tout sélectionner

Func miseajouraffichage()
$MatriceMiniDB=FileReadToArray($chemin)
$ContenuLigne = $MatriceMiniDB[$NumeroDeLigne-1]
$Extraction = StringSplit($ContenuLigne,@TAB,Default)
            If UBound($Extraction)>8 Then $Date = $Extraction[9]
            GUICtrlSetData($LabelDate,"Fin de FAB: " & $Date)
            $Commande = $Extraction[0]
            commentaire()
            GUICtrlSetData($LabelCommande,"Commande: " & $Commande)
            GUICtrlSetData($InputCommentaire,$Commentaire)
            GUICtrlSetData($InputCommentaire2,$Commentaire2)
EndFunc
pour trouver les commentaires je lis la ligne du fichier
je stringinStr et je stringtrim comme ci-dessous, ça marche bien.

Code : Tout sélectionner

Func commentaire()
    $Commentaire=""
    $Commentaire2=""
   For $IndexExtraction=0 To (UBound($Extraction))-1
;~      MsgBox($MB_SYSTEMMODAL,"",$Extraction[$IndexExtraction],1)
      If StringInStr($Extraction[$IndexExtraction],"Commentaire1",1,1)>0 Then
      $Commentaire= StringTrimLeft($Extraction[$IndexExtraction],12)
      EndIf

        If StringInStr($Extraction[$IndexExtraction],"Commentaire2",1,1)>0 Then
            $Commentaire2= StringTrimLeft($Extraction[$IndexExtraction],12)
        EndIf
    Next
EndFunc
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Enregistrer des données sur une même ligne d'un .tx

#15

Message par mikell »

En fait l'idéal serait que tu nous fasses un copier/coller (intégral et sans aucune modif) des machins que tu copies/colles, histoire qu'on puisse comprendre précisément de quoi on parle :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
achile
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mer. 09 avr. 2014 12:01
Status : Hors ligne

Re: [..] Enregistrer des données sur une même ligne d'un .tx

#16

Message par achile »

Bonjour,

je vais bosser pendant les fêtes et vous reviendrais vous dire en janvier, passer de bonne fêtes.

le copie colle c'est pas évident de vous montrer car il contient pas mal d'infos confidentielle..
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [..] Enregistrer des données sur une même ligne d'un .tx

#17

Message par blacksoul305 »

Bonsoir,

passe de bonnes fêtes également. Mais tu sais, à la rigueur tu aurais pu nous faire un copier/coller en remplaçant par quelque chose d'autres tes informations. Ce qu'on veut voir c'est la structure globale de la chaîne pour pouvoir t'aiguiller un peu mieux.
Étudiant en 2ème année de Licence Informatique.
achile
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mer. 09 avr. 2014 12:01
Status : Hors ligne

Re: [R]enregistrer des données sur une même ligne d'un .txt

#18

Message par achile »

DimVar a écrit :Dans ce cas, il vous faut concaténer les deux lignes pour une seule écriture. (ou je n'ai pas tout compris).


Cdlt, Dimvar.
Après différentes tentatives, et comme j'avais déjà écrit d'autres fonctions basées sur mon fichier texte J'ai choisi de concaténer.

Merci à tous pour vos conseils.
Répondre