Page 1 sur 1
[..] Ligne précise dans un .txt
Posté : ven. 28 oct. 2011 17:17
par silvere
bonjour,
Je voudrais récupérer une ligne précises dans un .txt :
le .txt :
le code :
► Afficher le texte
$lire = "[1]"
If $lire = "[1]" Then
; je voudrais qui lise la phrase qui est aprés le [1]
ElseIf $lire = "[2]" Then
; je voudrais qui lise la phrase qui est aprés le [2]
EndIf
A se que j'ai pu comprendre il faut faire sa avec un String mais le problème c'est que j'ai pas trop compris ce que c'était ( oui j'ai lu l'aide mais j'ai pas trop compris )
merci d'avance
Re: [..] ligne précises dans un .txt
Posté : ven. 28 oct. 2011 17:49
par PandiPanda
bon bhe je vous fait les étapes globales ? ^^
* Vous mettez chaque ligne dans un array ? =>
_FileReadToArray()
(ou vous lisez ligne par ligne et vous vous arretez quand vous trouvez, ou encore a coup de
StringRegExp() ou ...)
* vous parcourez cette array avec une boucle for ... next et verifier chaque valeur de l'array si il contient '[1]' avec la fonction =>
StringInStr() <> 0
Si vous avez trouvez une ligne alors, vous n'avez qu'a faire un
StringReplace() et en faire ce que vous voulez.
A savoir le * devant chaque 'etapes', pour vous dire que c'est le Plus facile, pas forcemment le plus performant.
Re: [..] Ligne précise dans un .txt
Posté : ven. 28 oct. 2011 21:18
par mikell
C'est pas un peu compliqué ? à la base, ce qu'il demande, c'est ça
Code : Tout sélectionner
$file = FileOpen("test.txt", 0)
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringLeft($line, 3) = "[1]" Then MsgBox(0,"", "1 = " & StringTrimLeft($line, 4))
Wend
FileClose($file)
Mais ya certainement une manière plus "compacte" de gérer ça, surtout si ça va juqu'à [999] ^^
Re: [..] Ligne précise dans un .txt
Posté : ven. 28 oct. 2011 23:11
par PandiPanda
Code : Tout sélectionner
$file = FileOpen("test.txt", 0)
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringLeft($line, 3) = "[1]" Then MsgBox(0,"", "1 = " & StringTrimLeft($line, 4))
Wend
FileClose($file)
PandiPanda a écrit :
Vous mettez chaque ligne dans un array
vous parcourez cette array avec une boucle for ... next et verifier chaque valeur de l'array si il contient '[1]' avec la fonction =>
StringInStr() <> 0
Si vous avez trouvez une ligne alors, vous n'avez qu'a faire un
StringReplace() et en faire ce que vous voulez.
à savoir que un while ou un for, c'est +- (j'exagere hein :p) la meme chose ... depend ce qu'on utilise ^^
à savoir faire un stringinstr() ou un stringLeft() dans les 2 cas elle ne sert simplement de vérification, ici.
à savoir le stringtrimLeft() et le stringreplace() dans les 2 cas elles ont la meme fonction, ici.
Donc je voit pas trop en quoi cela est compliqué ^^
à noter que votre script mikell est bien meilleur, je l'accorde, vous lisez dans le tas et vous pouvez vous arretez de "lire" dès que vous trouvez ce que vous avez besoin => ce qui n'est pas possible avec _FileReadToArray() [du moin a ma connaissance :O] mais je le trouve moin "abordable" que de gerer un array, apres ca reste que mon avis perso ^.^
Re: [..] Ligne précise dans un .txt
Posté : ven. 28 oct. 2011 23:15
par Tlem
La solution du tableau me semble plus appropriée dans le cas présent, car je suppose que silvere veut utiliser son fichier texte comme un 'dictionnaire' et qu'il y aura plusieurs demandes/accès aux données de ce fichier.
Dans ce cas, la méthode de mikell oblige une lecture systématique du fichier jusqu'à la ligne concernée et donc des accès disque régulier , alors que le tableau travaillera directement en mémoire.
Maintenant, tout dépend de la taille du fichier. Si celui-ci faire plusieurs centaine de Mo, alors la solution de mikell risque d'être la moins pénalisante en terme d'utilisation de ressources.

Re: [..] Ligne précise dans un .txt
Posté : sam. 29 oct. 2011 10:24
par mikell
PandiPanda a écrit :à noter que votre script mikell est bien meilleur, (....) mais je le trouve moin "abordable" que de gerer un array
Quand je vois la question "Je voudrais récupérer une ligne précise dans un .txt" je me dis que le gars est vraiment un débutant
Alors non mon script n'est pas meilleur, mais il est plus abordable dans le sens où il est simple et quand on le lit, on comprend instantanément la signification des expressions
Le FileReadLine je vois ça comme une étape vers la compréhension d'un script avec tableau (qui est généralement une meilleure solution)
Maintenant comme dit Tlem pour le côté pratique ça va dépendre de l'usage : peu de lectures => FileReadLine, appels fréquents => le tableau ^^
Effectivement on ne peut pas sortir d'une _FileReadToArray() même en la bidouillant parce qu'elle est construite autour d'un StringSplit, pour ça il faudrait la réécrire avec du FileReadLine (qui autorise une condition de sortie) avec ajout des éléments du tableau à chaque tour de boucle

Re: [..] Ligne précise dans un .txt
Posté : sam. 29 oct. 2011 17:26
par silvere
oui, j'aimerais faire comme un dictionnaire. Je se suis pas débutant mais pas non plus très fort en autoit je vais donc attendre un peut le temps que je comprenne mieu le langage autoit et revernir a mon problème plus tard car c'est encore un peut confu dans ma tête.