[R] Lecture de character
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Lecture de character
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 !
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.
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Lecture de character
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 ?
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
Re: [..] Lecture de character
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.
Re: [..] Lecture de character
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.
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.
Re: [..] Lecture de character
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 .. ?
Re: [..] Lecture de character
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é.
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é.
Re: [..] Lecture de character
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 .
En effet je cherche a lire ce qu'il y à entre la 7eme et la 8eme virgule dans mon bloc note .
Re: [..] Lecture de character
que signifie le "@CRLF" ?
Re: [..] Lecture de character
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.
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 :
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
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
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:
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.
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)
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)Code : Tout sélectionner
_ArrayDisplay($array)Allez c'est parti:
On va deja testé pour la premiere ligne
Code : Tout sélectionner
$array2 = StringSplit($array[1],',')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])
NextRe: [..] Lecture de character
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 ?
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 ?
Re: [..] Lecture de character
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

- 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
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.
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.
Re: [..] Lecture de character
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.
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

- 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
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.
Re: [..] Lecture de character
Une dernière petite question très rapide : comment on dit différent ( le contraire de égale ) serait-ce "<>" ?
Re: [..] Lecture de character
Il vous arrive de tester votre code des fois?
Sérieusement quoi...
Sérieusement quoi...

