[..] StringSlipt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

[..] StringSlipt

#1

Message 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.
Avatar du membre
L4crymal
Niveau 8
Niveau 8
Messages : 513
Enregistré le : mer. 24 sept. 2008 14:53
Status : Hors ligne

Re: [..]StringSlipt

#2

Message par L4crymal »

Envoi un fichier CSV d'exemple et je te le fait :)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]StringSlipt

#3

Message 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.
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é".
TaPuZ
Niveau 4
Niveau 4
Messages : 75
Enregistré le : jeu. 14 mai 2009 17:10
Status : Hors ligne

Re: [..]StringSlipt

#4

Message 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...
A bientôt,
T@PµZ.
____________________________________
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] StringSlipt

#5

Message 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.
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..]StringSlipt

#6

Message 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 :( :( :( :(
Drave
Niveau 4
Niveau 4
Messages : 53
Enregistré le : lun. 27 avr. 2009 09:47
Status : Hors ligne

Re: [..] StringSlipt

#7

Message 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

 
Un pti clique svp sa fait beaucoup pas de mal !
http://mon-zoo.jeuxcherche.com/myzoo.php?pseudo=drave
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] StringSlipt

#8

Message par guitarist »

Pour le fichier d'exemple voilà :
Fichiers joints

[L’extension csv a été désactivée et ne peut plus être affichée.]

TaPuZ
Niveau 4
Niveau 4
Messages : 75
Enregistré le : jeu. 14 mai 2009 17:10
Status : Hors ligne

Re: [..] StringSlipt

#9

Message 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...
A bientôt,
T@PµZ.
____________________________________
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] StringSlipt

#10

Message 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.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] StringSlipt

#11

Message 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)
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é".
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] StringSlipt

#12

Message par guitarist »

Voilà ce que j'ai bidouillé mais biensur ça ne marche pas.
► Afficher le texte
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] StringSlipt

#13

Message par orax »

Vous utilisez FileRead au lieu de FileReadLine. Et StringSplit retourne un tableau.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
TaPuZ
Niveau 4
Niveau 4
Messages : 75
Enregistré le : jeu. 14 mai 2009 17:10
Status : Hors ligne

Re: [..] StringSlipt

#14

Message 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
 
A bientôt,
T@PµZ.
____________________________________
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [R] StringSlipt

#15

Message par guitarist »

Voilà je l'ai refait mais ceci n'y change rien.
Merci d'afficher un script.
► Afficher le texte
Modifié en dernier par guitarist le sam. 10 oct. 2009 14:12, modifié 1 fois.
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] StringSlipt

#16

Message 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
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] StringSlipt

#17

Message 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)
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] StringSlipt

#18

Message 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?
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] StringSlipt

#19

Message par guitarist »

Merci beaucoup SagePourpre tu as fait je pense ce que je voulait merci :D :D :D :D
► Afficher le texte
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] StringSlipt

#20

Message 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.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Répondre