Re: [..]StringSlipt
Posté : mer. 17 juin 2009 23:37
par TaPuZ
Disons que Stringsplit est une super fonction, ultra utile, mais, à piger par soi-même.
Ce que je te propose, c'est de le tester sur un fichier que tu connais, et pas trop peuplé, pour alléger le tout.
Avant, tu peux même te faire un 'ti entrainement.
Tu choisis une variable, disons
$slash
et dedans, tu y mets le résultat du stringsplit appliqué sur un chemin, pour commencer.
Le chemin, est du type
C:\dossier1\dossier2\dossier3, et on veut couper au niveau des "\"
tu fais alors un $slash=stringplit($chemin, "\")
[où $chemin=C:\dossier1...]
C'est l'quivalent codé de ce qu'on a dit juste avant.
On va ensuite chercher à voir tous les bouts de chaines contenu dans la variable $slash.
Pour savoir le nombre de morceaux, tu affecte [0] à la variable, soit $slash[0]
Ensuite, tu peux accéder aux morceaux coupés en affectant [n] à ta variable, pour en voir le nième morceau :
$slash [n]
Pour mieux visualiser, fais-toi une petite MsgBox (0,"", $slash[$ii]), où $ii varie entre 1 et $slash[0] (le nombre de chaines coupées)
Soit
Code : Tout sélectionner
$chemin="C:\dossier1\dossier2\dossier3"
$slash=StringSplit($chemin, "\")
For $ii=1 to $slash[0]
MsgBox (0,"", $slash[$ii])
Next
Et là, logiquement, tu devrais mieux piger la fonction.
Après, pour le flag optionnel (basé à 0 par défaut)
0 => Coupure de la chaine à chaque fois qu'il y a un des caractères du délimiteur de trouvé (ici le '\')
1 => Coupure là où il y a la totalité des caractères du délimiteur
Si ça se trouve, je suis à côté de la plaque, mais c'est ce que j'en ai compris, et j'aime trop me la péter pour me taire, :p
EDIT : OOPS, j'ai été coiffé sur le poteau...
Re: [..] StringSlipt
Posté : ven. 19 juin 2009 13:04
par TaPuZ
Halte au feu les moussaillons!
L'essentiel est de comprendre.
Mon exemple attribuait la "valeur" "C:\dossier1\dossier2..." à $chemin.
Mais si on lit bien, il n'a jamais été question de lire un fichier pour le moment. Le topic ne s'interresse qu'au stringsplit.
Avant d'utiliser stringsplit, il faut le comprendre.
Testez donc l'exemple, pour le comprendre.
Une fois ceci fait, il faudra lire le fichier en question, et mettre le contenu du fichier dans une variable.
Alors, à ce moment, il sera possible d'appliquer le stringsplit sur la variable nouvellement peuplée.
Croyezle vieux fou que je suis, et qui fut jadis impétueux, vous gagnerez du temps à comprendre comment faire une recette, plutôt que d'appliquer au hasard des formules jusqu'à ce qu'une fonctionne plus ou moins...
Re: [..] StringSlipt
Posté : ven. 19 juin 2009 14:25
par Tlem
Pour lire un fichier ligne par ligne, utilisez la commande FileReadLine.
Le fichier d'aide vous apporte un exemple très simple.
Il vous suffira de remplacer la ligne MsgBox(0, "Line read:", $line) par votre traitement (conversion par StringSplit puis écriture dans fichier .ini)
Re: [..] StringSlipt
Posté : dim. 21 juin 2009 11:33
par SagePourpre
Ton précédent bout de code ne pouvait absolument pas fonctionner...
StringSplit prends une ligne complète et la place dans un tableau... En utilisant FilreRead comme tu le faisais, tu lisais seulement un caractère
à la fois, ce qui ne peut fonctionner avec stringsplit...
Tiens... Ceci fonctionne très bien.
J'ai mis un _arraydisplay en commentaire à la ligne 26 du script. Si tu veux voir ce que fait exactement stringsplit, enlève le ";" au début
de cette ligne pour voir le tableau généré par StringSplit (sur lequel je me base pour faire le reste)
Code : Tout sélectionner
#include<array.au3>
Global $lineN = 0
$source = "ex.csv"
$ini = StringTrimRight($source,3) & ".ini"
If FileExists($ini) Then
FileDelete($ini)
EndIf
$f = FileOpen($source, 0)
; Check if file opened for reading OK
If $f = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
; Read in lines of text until the EOF is reached
While 1
$lineN+=1
$line = FileReadLine($f)
If @error = -1 Then ExitLoop
$info = StringSplit($line,",",0)
;_ArrayDisplay($info)
IniWriteSection($ini,$lineN,"Nom = " & $info[1] & @LF & "Prenom = " & $info[2] & @LF & "Classe = " & $info[3])
Wend
FileClose($f)
Re: [..] StringSlipt
Posté : dim. 21 juin 2009 11:53
par guitarist
Encore une petite question voilà je me trouve avec le fichier .ini et voilà la donnée
[1]
Données = "Nom",Prénom",Classe,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
[2]
etc....
comment enlever les guillemets et les virgules svp?
Re: [..] StringSlipt
Posté : dim. 21 juin 2009 12:17
par SagePourpre
Voilà le script que je viens de t'envoyer avec une légère modification pour enlever les guillemets.
Code : Tout sélectionner
#include<array.au3>
Global $lineN = 0
$source = "ex.csv"
$ini = StringTrimRight($source,3) & ".ini"
If FileExists($ini) Then
FileDelete($ini)
EndIf
$f = FileOpen($source, 0)
; Check if file opened for reading OK
If $f = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
; Read in lines of text until the EOF is reached
While 1
$lineN+=1
$line = FileReadLine($f)
If @error = -1 Then ExitLoop
$info = StringSplit($line,",",0)
For $i = 1 To $info[0]
$info[$i] = StringTrimLeft(StringTrimRight($info[$i],1),1)
Next
;_ArrayDisplay($info)
IniWriteSection($ini,$lineN,"Nom = " & $info[1] & @LF & "Prenom = " & $info[2] & @LF & "Classe = " & $info[3])
Wend
FileClose($f)
En gros, pour y parvenir, il n'y a qu'à utiliser la commande stringtrimleft et stringtrimright pour enlever le premier et dernier caractère de chaque éléments
du tableau.
Donc, on a
Il suffit d'ajouter tout de suite après
Code : Tout sélectionner
For $i = 1 To $info[0]
$info[$i] = StringTrimLeft(StringTrimRight($info[$i],1),1)
Next
Ce qui dit de prendre chaque valeur dans le tableau généré par StringSplit et stockés dans la variable $info
et de la remplacer par la même chose sans le premier et dernier caractère (les guillemets)
Quant aux virgules, comme j'ai indiqué à la fonction StringSplit d'utiliser les virgules pour séparer les divers éléments dans ma ligne
de texte, elles sont automatiquement enlevées du tableau.
Tu peux bien entendu modifier la façon dont les données sont écrites dans le fichier *.ini si ça ne te convient pas (Comme il n'était mentionné
nul part à quoi le fichier *.ini résultant devrait ressembler, j'ai utilisé une construction de mon cru.