[..] Ligne précise dans un .txt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
silvere
Niveau 8
Niveau 8
Messages : 532
Enregistré le : sam. 24 sept. 2011 22:56
Status : Hors ligne

[..] Ligne précise dans un .txt

#1

Message par silvere »

bonjour,
Je voudrais récupérer une ligne précises dans un .txt :
le .txt :

Code : Tout sélectionner

[2] instruction 2
[1] instruction 1
 
le code :
► Afficher le texte
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
Quand le mensonge prend l'ascenseur, la vérité prend l'escalier. Elle met plus de temps, mais elle fini toujours par arriver.
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] ligne précises dans un .txt

#2

Message 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.
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Ligne précise dans un .txt

#3

Message 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] ^^
" 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
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Ligne précise dans un .txt

#4

Message 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 ^.^
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Ligne précise dans un .txt

#5

Message 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. :roll:

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. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Ligne précise dans un .txt

#6

Message 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 :mrgreen:
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) :wink:
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 :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
silvere
Niveau 8
Niveau 8
Messages : 532
Enregistré le : sam. 24 sept. 2011 22:56
Status : Hors ligne

Re: [..] Ligne précise dans un .txt

#7

Message 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.
Quand le mensonge prend l'ascenseur, la vérité prend l'escalier. Elle met plus de temps, mais elle fini toujours par arriver.
Répondre