[..] Transformation d'un fichier dans une Array

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

[..] Transformation d'un fichier dans une Array

#1

Message par ani » mar. 28 août 2007 13:57

et bein me voici avec un deuxieme post :(
j'ai un manque d'excercice pas possible ...

comme je lavais formulé dernièrement je ressort les vieux projet et je désire les terminer un part un ,,, ici c'est le color

je selectionne le fichier SciTE\au3.keywords.properties

Code : Tout sélectionner

If $cmdline[0] > 0 Then
    $Proprieteau3Scite = $cmdline[1]
Else
    $Proprieteau3Scite = FileOpenDialog("","c:","(au3.keywords.properties)",1)
    if @error = 1 then exit
EndIf
au3.keywords.functions=abs acos adlibdisable adlibenable asc asin assign atan autoitsetoption \

j'avais fait ceux-ci pour traiter le premier probleme des slash

Code : Tout sélectionner

Func Lecture($fichier)
    $Lecture = FileRead($Fichier, FileGetSize($Fichier))
    $Lecture = StringReplace($Lecture,"\" & @CRLF & @tab ,"")
        ConsoleWrite($Lecture & @CRLF)
    Return $Lecture
EndFunc   ;==>Lecture
donc si je comprend un peu le systeme de tableau,, le fichier selectionné est un array qui sera lui même composé de array?

Code : Tout sélectionner

fichierau3.keywords.properties = array(fichier)
$Split = stringsplit(array($fichier),"=")
$Fonction = $split[1]
$Word = $split[2]
j'ai pas encore réussi a divisé la conception avec le split

ici je me demandais avec le regex pour traiter le second fichier qui sera transformer avec la coloration (j'ai pris la meme base que la premiere fonction) mais je la ferai unique.

Code : Tout sélectionner

func lecture($fichier)

$read = fileread(fichier,filegetsize($fichier))
$read_array = strinregexp($read, [^ ... ])
if not @error then return $read_array
$read_symbols = strinregexp($read, '.?''*.?''.?',3)
if not @error then return $array_symbols
endfunc

Code : Tout sélectionner

$read_array = strinregexp($read, [^ ... ]) 
$read_symbols = strinregexp($read, '.?''*.?''.?',3)
pour le read array c'est tout les caractere ?
le read_symbols c'est au cas ou on rencontrerait le caractère <suivit> ou " blabvl et " ou encore #cs blablabla #ce ect

je m'eloigne surement du problème... enfin bon je retourne ^^'

Avatar du membre
sylvanie
Modérateur
Modérateur
Messages : 1544
Enregistré le : jeu. 26 juil. 2007 20:31
Localisation : Paris
Status : Hors ligne

#2

Message par sylvanie » jeu. 30 août 2007 21:29

Salut Ani,
Les explications sont en commentaires.
Le seul tableau à modifié dérière à la mimine est celui du send à cause du {{} {}} si le reste est fait automatiquement avec une vision un peu différente de la tienne :
chaque composante du tableau générale de dim 7 et lui mêm un tableau constitué de la manière suivante :
composante 0: nombre d'elts du tableau
composante 1 : nom de la catégorie (functions, udf ...)
composante 2 à n : la suite qui compose la catégorie en cours

Code : Tout sélectionner

#include <Array.au3> 
$fic=FileOpen ( "config.txt" , 0 ) 
if $fic= - 1 Then exit 1 
Dim $tab_line_to_splite[7]=["" , "" , "" , "" , "" , "" , ""] 
$indice= - 1 
While 1 
$line=FileReadLine ( $fic ) 
If @error = - 1 Then ExitLoop 
If StringInStr ( $line , ";" ) <> 0 Then ContinueLoop ; si c'est un commentaire , on saute 
If StringInStr ( $line , "=" ) <> 0 Then ;nouvelle catégorie 
If ( $indice>=0 ) Then 
$tab_line_to_splite[$indice]=StringTrimRight ( $tab_line_to_splite[$indice] , 1 ) ; élimination du caractère "|" en fin de chaîne et en trops pour l'indice précédent et transformer ceci en vrai tableau 
$tab_line_to_splite[$indice]=StringSplit ( $tab_line_to_splite[$indice] , "|" , 1 ) 
_ArrayDisplay ( $tab_line_to_splite[$indice] ) 
EndIf 
$indice += 1 
$tab_first_line=StringSplit ( $line , "=" , 1 ) ; on découpe par rapport au = 
$name_category=StringRegExp ( $tab_first_line[1] , "\. ( [\w\d]+ ) \Z" , 3 ) ; on sélectione toute les lettres / chiffres depuis la fin et précédés d'un . 
$tab_line_to_splite[$indice]&=$name_category[0]&"|" ; le resultat de tout à l'heure est unique ( normalement , attention je n'ai pas traîté les retours d'erreur 
$line=$tab_first_line[2] ; on écrase $line par la deuxième composante pour traîter le reste comme une ligne classique 
EndIf 
If $indice<0 Then ContinueLoop ; cas potentiel d'un fichier mal formater formater où on arriverait ici avec un indice negatif 
$line=StringReplace ( $line , "\" , "" ) ; élimine de \ de fin de la chaîne 
$line=StringStripWS ( $line , 3 ) ; efface les espaces avants et arrières potentiels 
$tab_line_to_splite[$indice]&=StringReplace ( $line , " " , "|" ) 
$tab_line_to_splite[$indice]&="|" 
WEnd 
;traitement du dernier tableau hors boucle 
StringTrimRight ( $tab_line_to_splite[$indice] , 1 ) ; élimination du caractère "|" en fin de chaîne et en trops pour l'indice précédent et transformer ceci en vrai tableau 
$tab_line_to_splite[$indice]=StringSplit ( $tab_line_to_splite[$indice] , "|" , 1 ) 
_ArrayDisplay ( $tab_line_to_splite[$indice] ) 
FileClose ( $fic ) 
Exit 0
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.

ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

#3

Message par ani » jeu. 30 août 2007 22:06

le code qui m'achève :(
faut encore que je comprenne :(

y a une erreur sinon :o
mais sinon c'est top

elle doit afficher 7colonne ou 7 display array ?

faut que je relise la doc du file a string car bouhhhhhh
on peut ajouter les couleur la dedans ou vaut mieux passer par une seconde fonction ?

func coloration (string, style)
en partant du array >[1] si udfs,.... couleur truc
endfunc

ou je pars encore loin ?

je vais manger je re :o
Modifié en dernier par ani le jeu. 30 août 2007 22:29, modifié 1 fois.

Avatar du membre
sylvanie
Modérateur
Modérateur
Messages : 1544
Enregistré le : jeu. 26 juil. 2007 20:31
Localisation : Paris
Status : Hors ligne

#4

Message par sylvanie » jeu. 30 août 2007 22:13

ani a écrit : y a une erreur sinon :o
Ah bon ? il marche bien pourtant chez moi ? mis à part le cas épineux du send, c'est ça ?
ani a écrit : je remplis quoi la dedans ?
Dim $tab_line_to_splite[7]=["" , "" , "" , "" , "" , "" , ""]

c'est pour le display ?

elle doit afficher 7colonne ou 7 display array ?
ce sont 7 initialisations de string à vide, chacune contiendra après les elts respectifs de functions, udfs, keywords, macros, preprocessor et sendkeys

chaque ligne est constituée du nom de la catégorie puis | elt1 | elt2
...
exple : functions|abs|acos|adlibdisable ...

puis en fin de parcours, un stringsplit sur | transforme ceci en un tableau avec la dimension en début
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.

ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

#5

Message par ani » jeu. 30 août 2007 22:33

hm je vien d'editer le msg j'ai fait un test en remplissant une case du tab_line > elle doit afficher en position [1]

ligne 22

Code : Tout sélectionner

$tab_line_to_splite[$indice]&=$name_category[0]&"|" 
j'ai changé en çà (et maintenant il me retourne la valeur)

Code : Tout sélectionner

$tab_line_to_splite[$indice]&=$tab_first_line[1] & "|" 

j'ai trouvé dans l'aide la fonction string conversion (StringStripCR)
je l'ai rajouter un stringsplit(StringStripCR($lecture))

comme ceux-ci :

$Fichier = "C:\Program Files\AutoIt3\SciTE\properties"
$lecture = FileRead($Fichier, FileGetSize($Fichier))
$lecture = StringReplace($lecture,"\" & @CRLF & @tab,"")
$Lecture_Lignes = StringSplit(StringStripCR($lecture), @LF)


si je demande qu'il me retourne Lecture_Lignes[0] il me sort 7 lignes,,, la c'est ok
si je demande de me sortir Lecture_Lignes[1] il me sort la premiere ligne au3.keywords.*= et les fonctions

je dois appeler chaque ligne par lecture_lignes[numero jusque 7]

je devrais passer par un for ubound(lecture_ligne) .?

ou je note
lecture_ligne[0] = $nbre
lecture_ligne[1] = $au3.keywords.functions
.....
lecture_ligne[7] = $au3.keywords.sendkeys
return lecture_ligne



vais retourner dans l'aide car je commence a .... suis a 4 ligne seulement :(

ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

#6

Message par ani » sam. 01 sept. 2007 15:00

je vais proceder autrement ^^'

comment je peux mettre la premiere lettre en majuscule ?
et indiquer en fin ligne un caractère ?

exemple
je m'appel ani

donnerai
Je m'appel ani |


bon je retourne dans l'aide et je soumettrais le code surement a corriger :D

merci d'avance et excusé encore mais l'anglais et moi c'est pas fortich

Avatar du membre
sylvanie
Modérateur
Modérateur
Messages : 1544
Enregistré le : jeu. 26 juil. 2007 20:31
Localisation : Paris
Status : Hors ligne

#7

Message par sylvanie » sam. 01 sept. 2007 15:44

méthode didactique

Code : Tout sélectionner

$string="je m'appelle Ani"
$first_letter=stringleft($string,1) ;isolation de la première lettre
$first_letter=StringUpper($first_letter) ; passage en majuscule
$string=StringTrimLeft($string,1);on se débarrasse de la première lettre
$string=$first_letter&$string&"|"
ConsoleWrite($string&@CRLF)

méthode de la mort qui tue
$string="je m'appelle Ani"
$string=StringRegExpReplace($string,"\A\w",StringUpper(StringLeft($string,1)))&"|"
ConsoleWrite($string)
Modifié en dernier par sylvanie le sam. 01 sept. 2007 22:44, modifié 2 fois.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.

Avatar du membre
Voodoo
Site Admin
Site Admin
Messages : 298
Enregistré le : ven. 20 juil. 2007 19:45
Status : Hors ligne

#8

Message par Voodoo » sam. 01 sept. 2007 17:05

Pour le traitement du fichier je propose ceci :wink: :(Dans la Source forum color 1.4)

Code : Tout sélectionner

$file = fileread ( @ScriptDir & " /au3.keywords.properties " ) 
$data = StringReplace ( $file , " \ " , " " ) 
$result = StringSplit ( StringStripWS ( $data , 6 ) , " = " ) 
$function = StringSplit ( $result[2] , " " ) 
$udfs = StringSplit ( $result[3] , " " ) 
$keywords = StringSplit ( $result[4] , " " ) 
$macros = StringSplit ( $result[5] , " " ) 
$preprocessor = StringSplit ( $result[6] , " " ) 
$special = StringSplit ( $result[7] , " " ) 
$sendkeys = StringSplit ( $result[8] , " " ) 
_ArrayDelete ( $function , $function[0] ) 
_ArrayDelete ( $function , $udfs[0] ) 
_ArrayDelete ( $keywords , $keywords[0] ) 
_ArrayDelete ( $macros , $macros[0] ) 
_ArrayDelete ( $preprocessor , $preprocessor[0] ) 
_ArrayDelete ( $special , $special[0] ) 
$function[0] -= 2 
$udfs[0] -= 1 
$keywords[0] -= 1 
$macros[0] -= 1 
$preprocessor[0] -= 1 
$special[0] -= 1
( Colorer avec forum color 1.4 evidement ^^)

Voici l'operation:
  1. j'enléve les \ et j'efface les espaces inutiles.
  2. Je trie les fonctions grâce aux =.
  3. j'efface la dernier entrée qui est inutile et donc je mets à jour le premier array qui défini le nombre de ligne.

Avatar du membre
sylvanie
Modérateur
Modérateur
Messages : 1544
Enregistré le : jeu. 26 juil. 2007 20:31
Localisation : Paris
Status : Hors ligne

#9

Message par sylvanie » sam. 01 sept. 2007 20:51

plus court, et plus simple à comprendre effectivement.

par contre il faut penser à :
- enlever la première phrase de commentaire
- récupérer en fin de chaque tableau , le nom de la catégorie suivante suitée en dernière position, exepté pour le dernier tableau (puisqu'il n'y a pas de catégorie suivante
- revenir manuellement sur le problème du {{} {}} qui persiste également sur cette méthode
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.

ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

#10

Message par ani » dim. 02 sept. 2007 02:12

@sylvanie , d'accord je comprend mieux mais si exemple dans le début de la ligne j'ai caractere tel que : ' ( _ la premiere lettre ne sera pas vu.

y a une formule en regex ?
pourquoi y aurai problème avec {{}

@voodoo , héhé color v1.4, en + tu es meme pas à jour avec la derniere version :P (idem ^^ ,,, meme version que toi ;) )

que signifie cette ligne au juste ? c'est pas pour moi c'est pour les lecteurs et lectrices :)

Code : Tout sélectionner

$result = StringSplit ( StringStripWS ( $data , 6 ) , " = " )
le arraydelete ?

Code : Tout sélectionner

_ArrayDelete ( $function , $function[0] )


j'ai du surement déjà le demander :(
au niveau regex pour que je pige bien pour lire tout ce qui se trouve avant le = quelque soit sa position dans le text

vais relire j'avance pas grrrrrr j'ai l'idée mais rien :(
le délire du tableau pas encore bien compris :(

merci ;)

Avatar du membre
Voodoo
Site Admin
Site Admin
Messages : 298
Enregistré le : ven. 20 juil. 2007 19:45
Status : Hors ligne

#11

Message par Voodoo » dim. 02 sept. 2007 10:51

Code : Tout sélectionner

$result = StringSplit ( StringStripWS ( $data , 6 ) , " = " ) 

Le $data représente le fichier lu en entier donc cette ligne permet d'effacer les espaces avant et apres chaques phrases. Puis je découpe tout le texte en fonction des =. 


_ArrayDelete ( $function , $function[0] )
Efface la dernière ligne. Pour bien comprendre voila un exemple:

si je trouve dans $data ceci

Code : Tout sélectionner

udfs=_arrayadd _arraybinarysearch _arraycreate _arraydelete _arraydisplay
keywords=and byref case const continuecase continueloop default dim
Apres avoir effacé les espaces et segmenter suivant les = j'obitent ceci comme array dans $result:

Code : Tout sélectionner

$result[0]=2
$result[1]=_arrayadd _arraybinarysearch _arraycreate _arraydelete _arraydisplay [b]keywords[/b]
$result[2]=and byref case const continuecase continueloop default dim
car le keyword est avant le '='. Il est donc inutoe est en plus genant. Je sais qu'il va apparaitre à la fin donc j'efface la derniére ligne qui est indiqué par $result[0]. D'ou _ArrayDelete ( $function , $function[0] )

J'ai d'ailleur oublier le #include <array.au3>

Avatar du membre
sylvanie
Modérateur
Modérateur
Messages : 1544
Enregistré le : jeu. 26 juil. 2007 20:31
Localisation : Paris
Status : Hors ligne

#12

Message par sylvanie » dim. 02 sept. 2007 11:17

Ah, boulette de ma part (et ce ne sera sûrement pas la dernière ^^ ), effectivement, il n'y a pas de pb avec {{} et {}} dans aucune des méthode, je m'étais imaginé autre chose ...

sinon 3eme méthode avec les caractères bizaroïdes au début :

Code : Tout sélectionner

$string="%*$ù_je m'appelle Ani" 
$first_letter=StringRegExp ( $string , "\A[\W_]* ( [a - zA - Z] ) " , 3 ) 
$string=StringReplace ( $string , $first_letter[0] , StringUpper ( $first_letter[0] ) , 1 ) 
ConsoleWrite ( $string )
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.

ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

#13

Message par ani » dim. 02 sept. 2007 12:58

ok, je testerai tantot je devrait indiquer des condition si caractere _ trouvé alors prendre cara suivant (juste la premiere (alphabet-A-z)

je sais pas ce que je fou ,,, très tot ce matin je reussi a faire ce que je désiré et là plus moyen,,, en eteingnant, j'ai pas appuyer sur le bon bouton,,, enregistrer les modifications ::: non :§

en faite si je demande pour la premiere lettre c'est au niveau du tableau avec les fonctions words,,, si j'indique l'url il l'a trouve pas, du au premier caractere qui est en minuscule :( alors que normalement il ne devrait y avoir aucun soucis (j'apprend que le majuscule et minuscule à sont importance dans un lien...)

bon vais relire regexe et le traduire :§
j'ai remarqu" dans divers sources(php) que le regex a son importance (plus simple et rapide c'est çà?) simple chez pas rapide non plus ^^'

mode::lecture seul :D


merci boucoup pour les explication, moins troubles, mais j'y nage encore :(

Avatar du membre
sylvanie
Modérateur
Modérateur
Messages : 1544
Enregistré le : jeu. 26 juil. 2007 20:31
Localisation : Paris
Status : Hors ligne

#14

Message par sylvanie » dim. 02 sept. 2007 13:01

avec ce que je viens de mettre, tu n'as plus à faire de teste sur les premier caractères pour détecter la première lettre. Cette expression régulière s'en charge
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.

ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

#15

Message par ani » mar. 04 sept. 2007 00:24

ok ok :)

voilà après deux jours :D et encore suis a un quart du script :((
il me sort cette erreur :(

Code : Tout sélectionner

global $blank[1024] = ["1","2","3",_
              "4","5" .... ", _
              "1024"]
String missing closing quote.:

suis tout deg il m'avait déjà sortie l'ereur lors d'un premier script avec le tableau du dessus :(
et je vois pas l'erreur :(

faudrai que je relise le regexxxxx ci-dessus
¿qui ouvre un petit topic avec des expressions et de petit exemple bien sympathique :) qui qui héhé je vois une main se lever, montre toi :)

merci

je bloque :(, enfin vu l'erreur peut rien faire :(((((((
tout refaire, ne rien garder :D

rebelotte

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11449
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

#16

Message par Tlem » mar. 04 sept. 2007 06:52

ani a écrit :global $blank[1024] = ["1","2","3",_
"4","5" .... ", _
"1024"]

String missing closing quote.:
Il y a dans cette ligne, plusieurs erreurs (Sans doute erreur de transcription ou de copier/coller) :
1 - Il manque l'espace avant le premier underscore
2 - Il manque la virgule après le "5"
3 - Il manque le guillemet avant les 3 petits point.

Ce qui nous donne :

Code : Tout sélectionner

global $blank[1024] = ["1","2","3", _
              "4","5",".... ", _
              "1024"]
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é".

ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

#17

Message par ani » mar. 04 sept. 2007 10:38

m^^e

normalement l'espace entre deux variables n'a pas d'importance tant qu'il a un séparateur

exemple
array[4]=["1","2","3","4"]
sera idem que
array[4]= ["1", "2", "3", "4"]


la j'essaye qui me retourne l'erreur de la ligne pour que je vois quoi mais rien :(, je vois pas :(
j'ai essayé avec le debugmessage ou console mais rien non plus
que je passe par un stringsplit (en multiligne ou en une seul ligne) j'obtiend toujours la même erreur.

vais relire ligne par ligne le script mais normalement y a rien,,, c'est le fichier que j'importe dans le array qui ....

et je veux pas passer a un autre script, d'abord terminer celui-ci avant de passer a la suite ^^'

mercii

ps:je vais essayé avec les expressions regulière proposé ici on sait jamais ^^'

Avatar du membre
sylvanie
Modérateur
Modérateur
Messages : 1544
Enregistré le : jeu. 26 juil. 2007 20:31
Localisation : Paris
Status : Hors ligne

#18

Message par sylvanie » mar. 04 sept. 2007 20:41

heu... et étant donné le contenu, pourquoi ne pas passer par une boucle for d'initialisation ?Image

Bon je me doute, que le contenu n'est pas celui indiqué ^^
si il manquait un espace entre la , et _, on aurait une erreur de syntaxe et non de string non terminée, donc on peut exclure cette hypothèse.
Prends un autre éditeur pour mettre en évidence ton problème de côte manquante ...
par exple avec pspad ou textcrawler, recherche l'expression régulière :
"[\w\d\s]+,"
qui va sélectionner les partie de type "var,"
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.

ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

#19

Message par ani » ven. 07 sept. 2007 11:20

hm,, et bien je tourne en rond,,,

oui le tableau ne ressemble pas à ça, j'ai vérifié et y a rien en quote ..sa m'a telement soualé que le dossier AU3 c'est vu Détruire ...... donc je recommence encore et encore à zéro :§ , même en 5 ligne je foire :§ et je veux pas passer à autre chose ni abandonner le petit projet color même si il est déjà existant :(
d'abord le terminer :( en prime j'avais quazi reussi mais il me faisait que le premier mots de chaque keyword :§

en lisant le fichier on sait que le premier séparateur et un egal
donc un stringsplit ?
on obtiend stringtrimleft et stringtrimright ?

sa m'enerve :(

je réediterai,,,, je rentre à la maison

ani
Modérateur
Modérateur
Messages : 1826
Enregistré le : lun. 23 juil. 2007 11:31
Localisation : Bureau
Status : Hors ligne

#20

Message par ani » mer. 12 sept. 2007 11:25

si on par de cette expression

$bb = "C:\Program Files\AutoIt3\SciTE\au3.keywords.properties"
$bbc = StringRegExp(FileRead($bb),"(au3.*)[=]",3)

tout d'abord est-ce correct au niveau de l'expression régulière?

si je fait une boucle for il me renvoi bien les 7 keyword.

Au niveau des couleur y aura un array qui engloberais les 7 keyword

$style[7] = [début,fin|......

dans mon idée sa devrait faire ceux-ci
au3.keyword.function
ascin| color=#000090 b i ascin /i /b /color

j'ai pas indiquer les balise d'ouverture et fermeture [

avec ce nouveau tableau il ne reste plus qua lire le fichier qu'on veut transformer et d'y faire un stringreplace ?

possible de m'aider :)

je vais ouvrir un post sur l'expression réguliere :)

par la meme occasion je rentre chez moi ce soir \o/

Répondre