[R] Lecture de character

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
theooalfa
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 27 oct. 2010 09:41
Status : Hors ligne

[R] Lecture de character

#1

Message par theooalfa »

Salut a tous,
Cela fait déjà plusieurs heures que je cherche une commande me permettant de lire un caractère d'un bloc note en vain alors je finis par demander de l'aide ici.

Enfaite ce que je cherche a faire c'est une boucle qui lise les caractères un a un au sain d'un même ligne en comparant les caractères lu avec le caractère que je cherche (une virgule). Le problème étant que je ne cherche pas la 1ere virgule mais la 7eme ou quelque chose comme ça ... pour lire ce qui suit cette virgule !

Merci d'avance !
Modifié en dernier par theooalfa le mer. 27 oct. 2010 18:42, modifié 1 fois.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Lecture de character

#2

Message par Iste »

Pwaa !

Ne réinventer pas la roue, les regexp vous seront utile pour ce genre d'opération.

Quand vous parlez d'"un caractère d'un bloc note", l'avez vous récupérer dans votre script ou doit-on travailler directement sur un outil externe ?
Signez ici
theooalfa
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 27 oct. 2010 09:41
Status : Hors ligne

Re: [..] Lecture de character

#3

Message par theooalfa »

C'est à dire que je ne sais pas comment récupérer les caractères les uns après les autres dans une variable pour ensuite les comparer. Je cherche à les récupérer les uns après les autres de gauche a droite et au sain d'une même ligne.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Lecture de character

#4

Message par timmalos »

Pour récupérer le texte à partir du bloc-note, regardez WingetText, sinon vous pouvez directement ouvrir le fichier avec Autoit avec un FileOpen, FileRead.

Ensuite quand vous avez votre texte dans la variable, vous pouvez chercher la 7eme virgule avec un StringSplit($texte,',') et prendre la 7eme case du tableau retourné, ou alors un StringInStr avec un index à 7, bref selon ce que vous souhaitez faire de multiples solutions existes.
theooalfa
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 27 oct. 2010 09:41
Status : Hors ligne

Re: [..] Lecture de character

#5

Message par theooalfa »

Le problème c'est que je compte répéter l'opération sur plusieurs ligne de ce texte les unes après les autres serait il possible de ne mettre dans ma variable que cette première ligne ? et ensuite une autre et ainsi de suite .. ?
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Lecture de character

#6

Message par timmalos »

Attendez, allez doucement en besogne !

D'abord Recuperez TOUT le texte du fichier.
Ensuite, il vous suffit de faire un StringSplit($texte_fichier,@CRLF) pour obtenir une Array dont chaque case contiendra une ligne.
Ensuite on peut commencer à travailler sur ce que vous souhaitez.
Mais pourquoi la 7eme virgule, vous voulez quoi ? Le texte qui vient après, avant, juste voir si oui ou non y'a une 7eme virgule?

Bref, si vous ne nous donnez pas plus d'informations on pourra pas plus vous aider, j'ai déjà ecrit le nom de toutes les fonctions capables de faire le travail demandé. Maintenant c'est à vous de vous débrouiller avec l'aide d'Autoit en regardant les fonctions que je vous ai donné.
theooalfa
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 27 oct. 2010 09:41
Status : Hors ligne

Re: [..] Lecture de character

#7

Message par theooalfa »

Oui oui c'est actuellement ce que je fais j'examine chaqu'une des fonctions que vous m'avez donné et je vous en remercie !
En effet je cherche a lire ce qu'il y à entre la 7eme et la 8eme virgule dans mon bloc note .
theooalfa
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 27 oct. 2010 09:41
Status : Hors ligne

Re: [..] Lecture de character

#8

Message par theooalfa »

que signifie le "@CRLF" ?
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Lecture de character

#9

Message par timmalos »

Je vous montre comment on construit un script:

Alors si je lis l'exemple de WinGetText, c'est exactement ce qu'il vous faut.
On va donc essayer voir si ca marche.

Code : Tout sélectionner

$text = WinGetText("[CLASS:Notepad]", "")
MsgBox(0, "Text read was:", $text)
 
Si vous obtenez bien le texte total présent dans le Bloc note c'est que ca marche, on peut donc enlever le MsgBox et passer à la suite.
Donc maintenant, on veut séparer le texte en lignes. Pour cela, il faut trouver le séparateur, si on cherche bien on trouve que c'est la macro @CRLF qui fait office de retour à la ligne. Si le Bloc-note n'a que @CR ou @LF alors il ne revient pas à la ligne ce qui nous arrange dans ce cas.
On va donc faire un :

Code : Tout sélectionner

$array = StringSplit($text,@CRLF)
Maintenant il faut voir si ca marche. Comment debuguer un array? Il faut juste rajouter @Include <Array.au3> en début de votre script et rajouter en dessous la ligne

Code : Tout sélectionner

_ArrayDisplay($array)
Tout marche? On peut continuer. On veut le texte entre la 7eme et la 8eme virgule. Donc si on sépare le texte a chaque fois qu'on trouve une virgule, on aura pile ce qu'il nous faut.
Allez c'est parti:
On va deja testé pour la premiere ligne

Code : Tout sélectionner

$array2 = StringSplit($array[1],',')
Et donc le texte qui nous interesse sera dans $array2[7]. Un petit msgBox pour verifier, et c'est bon ;)

Il suffit maintenant de faire ca pour toutes les lignes:

Code : Tout sélectionner

For $i = 1 to $array[0]
       $array2 = StringSplit($array[$i],',')
       MsgBox(0,'Texte trouvé',$array2[7])
Next
Et voilà, il faudrait juste rajouter une condition pour être sure que $array2 contienne bien au minimum 7 cases (Peut etre qu'une ligne contient moins de 7 virgules , à vous de voir si ca peut se produire.
theooalfa
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 27 oct. 2010 09:41
Status : Hors ligne

Re: [..] Lecture de character

#10

Message par theooalfa »

Woaw c'est franchement géniale merci beaucoup !
Par contre j'ai pas bien compris comment fonctionnait la dernière étape :S (j'aime pas copier sans comprendre ...)
et aussi je voudrais savoir pourquoi dans le tableau pour les valeurs de "row" = 0 j'ai des valeur qui n'existent pas sur mon bloc note ? es-ce normal ?
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Lecture de character

#11

Message par timmalos »

Lisez la documentation. La fonction StringSplit retourne en valeur 0 le nombre de fois ou elle a trouvé l'occurence. Ce qui nous permet de savoir le nombre de lignes trouvées, ou le nombre de virgules , etc...
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

Re: [..] Lecture de character

#12

Message par Habibsbib »

Timmalos, il faut beaucoup plus qu'un StringSplit pour récupérer le nombre de lignes d'un String, rien qu'à voir la longueur de l'include FileReadToArray.
Au début, je croyais que la manipulation était longue seulement pour gérer les erreurs, mais en fait c'est vraiment nécessaire.
Bref, ajoutes la balise "[R]" à votre sujet, je crois que timmalos t'as très bien répondu.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Lecture de character

#13

Message par timmalos »

Bien entendu , la manipulation est longue pour être sur de n'oublier aucun cas, mais ce que vous dites est faux car comme je l'ai precisé avant, il veut recuperer un texte à partir du BLOC-NOTE qui lui n'accepte le retour à la ligne qu'avec un @CRLF. Essayez d'enregistrer un fichier avec Scite en allant dans Option-> Charactere de fin de ligne-> cliquez sur CR ou LF-> puis Option->Convertir les characteres de fin de ligne
Puis enregistrez et ouvrez le fichier avec le bloc-note, vous verrez qu'il n'affiche qu'une seule ligne.


Donc je maintiens ce que j'ai dis, un simple StringSplit($texte,@CRLF) suffit dans ce cas.

Edit : J'ai quand même vérifié vos dires, et ce que j'ai dis est juste, si vous regardez bien la fonction _FileCountLine, ce qu'ils font n'est pas necessaire en prenant une chaine de charactere à partir du bloc-note. La seule vérification à faire serait de verifier qu'il n'y a pas une ligne vide à la fin du fichier, mais ca dépend de ses besoins comme je l'ai dis avant ca ne serait qu'une vérification supplémentaire qui peut être nécessaire en fonction de ses besoins.
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

Re: [..] Lecture de character

#14

Message par Habibsbib »

Je n'ai pas lu le post en entier, effectivement si c'est seulement pour une lecture d'Edit sous Bloc-Notes, c'est tranquille.
theooalfa
Niveau 1
Niveau 1
Messages : 10
Enregistré le : mer. 27 oct. 2010 09:41
Status : Hors ligne

Re: [..] Lecture de character

#15

Message par theooalfa »

Une dernière petite question très rapide : comment on dit différent ( le contraire de égale ) serait-ce "<>" ?
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Lecture de character

#16

Message par timmalos »

Il vous arrive de tester votre code des fois?
Sérieusement quoi...
Répondre