Page 1 sur 1
[R] Enregistrer des données sur une même ligne d'un .txt
Posté : lun. 15 déc. 2014 09:27
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,
Re: [..] enregistrer plusieurs données dans un fichier .txt
Posté : lun. 15 déc. 2014 09:49
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.
Re: [..] enregistrer plusieurs données dans un fichier .txt
Posté : lun. 15 déc. 2014 11:15
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 ?
Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : lun. 15 déc. 2014 11:39
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.
Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : lun. 15 déc. 2014 12:44
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])
Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : lun. 15 déc. 2014 13:07
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.
Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : lun. 15 déc. 2014 13:48
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=...
Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : lun. 15 déc. 2014 16:32
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

Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : lun. 15 déc. 2014 21:30
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

Moi non plus !

Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : mar. 16 déc. 2014 00:37
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 !
Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : mar. 16 déc. 2014 13:50
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
Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : mar. 16 déc. 2014 14:37
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.
Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : mer. 17 déc. 2014 16:53
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
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,
Re: [..]enregistrer des données sur une même ligne d'un .txt
Posté : mer. 17 déc. 2014 17:00
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
Re: [..] Enregistrer des données sur une même ligne d'un .tx
Posté : mer. 17 déc. 2014 19:49
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

Re: [..] Enregistrer des données sur une même ligne d'un .tx
Posté : ven. 19 déc. 2014 09:51
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..
Re: [..] Enregistrer des données sur une même ligne d'un .tx
Posté : ven. 19 déc. 2014 17:29
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.
Re: [R]enregistrer des données sur une même ligne d'un .txt
Posté : lun. 05 janv. 2015 16:04
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.