Page 1 sur 2

[..] StringSlipt

Posté : mer. 17 juin 2009 18:49
par guitarist
Bonjour comme toujours (je pense que cela va vous énerver mais bon) j'ai besoin d'aide sur la fonction StringSlipt en deux mots voilà mon but :
Receuillir des info dans un fichier CSV pour les mettres dans un fichier .ini (ceci était pour revenir en arrière pour ceux qui n'etait pas là)
Un bon exenmple me suffira merci de votre aide.

Re: [..]StringSlipt

Posté : mer. 17 juin 2009 22:00
par L4crymal
Envoi un fichier CSV d'exemple et je te le fait :)

Re: [..]StringSlipt

Posté : mer. 17 juin 2009 23:28
par Tlem
En deux mot, cela va être dure, mais en trois :
StringSplit = Découpage de chaîne. :lol: :P

Un exemple :

Code : Tout sélectionner

$days = StringSplit("Sun,Mon,Tue,Wed,Thu,Fri,Sat", ",")
;$days[1] contains "Sun" ... $days[7] contains "Sat"

$text = "This\nline\ncontains\nC-style breaks."
$array = StringSplit($text, '\n', 1)
Hein ... C'est l'exemple du fichier d'aide ... Ha bon !!! :roll:

Bon sinon, pour être sérieux, tapez csv dans le moteur de recherche du forum et vous trouverez quelque pages avec des codes qui pourrait vous inspirer.

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 11:41
par guitarist
En faite non :( je n'ai absolument rien compris et je n'ai pas réussi votre exemple est-que c'est le problème que j'ai un fichier openoffice?Cela dit il faudrait aussi m'expliquer un peu les tableau de variables car je pense que ça vient de la merci pour votre aide.

Re: [..]StringSlipt

Posté : ven. 19 juin 2009 11:57
par guitarist
Bon sinon, pour être sérieux, tapez csv dans le moteur de recherche du forum et vous trouverez quelque pages avec des codes qui pourrait vous inspirer.
Non je n'ai rien trouvé qui pourrai m'inspirer :( :( :( :(

Re: [..] StringSlipt

Posté : ven. 19 juin 2009 12:13
par Drave
Hello tout le monde je suis en se moment avec mon amis en se moment et on a un petit probleme
String Split lit le chemin d'acces et ne lit pas linterieur de fichier.Voici le code

Code : Tout sélectionner

$chemin = "F:\BASE ELEVES.csv"
$slash = StringSplit ($chemin,",")

For $i=1 To $slash [0]
    MsgBox (64,"",$slash[$i])
Next

 

Re: [..] StringSlipt

Posté : ven. 19 juin 2009 12:13
par guitarist
Pour le fichier d'exemple voilà :

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 13:31
par guitarist
C'est bon j'ai compris l'exemple maintenant comment fait-on pour lie un fichier svp?Biensur sans avoir a mettre tout le contenu dans un variable puisque qu'il y a environ 850 lignes.

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é : sam. 20 juin 2009 19:05
par guitarist
Voilà ce que j'ai bidouillé mais biensur ça ne marche pas.
► Afficher le texte

Re: [..] StringSlipt

Posté : sam. 20 juin 2009 21:55
par orax
Vous utilisez FileRead au lieu de FileReadLine. Et StringSplit retourne un tableau.

Re: [..] StringSlipt

Posté : dim. 21 juin 2009 11:10
par TaPuZ
Bah... Il faut vraiment passer un peu de temps pour comprendre les exemples, au lieu de se lancer tête baissée.
Donc, effectivement, après avoir remplacé le file read line, essaye de rajouter des lignes, juste pour comprendre l'histoire du tableau

Code : Tout sélectionner

;IniWrite ("cdvi.ini",$code,"Tout",$r) => A commenter, pour éviter le problème lié à $r.
For $i=1 To $r [0]
    MsgBox (64,"",$r[$i])
Next
 

Re: [R] StringSlipt

Posté : dim. 21 juin 2009 11:15
par guitarist
Voilà je l'ai refait mais ceci n'y change rien.
Merci d'afficher un script.
► Afficher le texte

Re: [..] StringSlipt

Posté : dim. 21 juin 2009 11:27
par guitarist
Je l'ai refait celon ta maniere Tapuz
C'est déjà bien mieu voici le code.
► Afficher le texte
Pour arranger certains problèmes je vais le finir et je vous donnerai mon dernier résultat à corriger
Merci

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 11:56
par guitarist
Merci beaucoup SagePourpre tu as fait je pense ce que je voulait merci :D :D :D :D
► Afficher le texte

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

Code : Tout sélectionner

$info = StringSplit($line,",",0)


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)

Code : Tout sélectionner

StringTrimLeft(StringTrimRight($info[$i],1),1)
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.