Page 1 sur 2

[R] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 15:06
par TT22
Bonjour,
Je voudrais savoir comment faire pour sauter des lignes dans un fichier ini.
Car dans certains de mes scripts, je stocke des données dans des ini.
Mais quelques fois, les données doivent sauter des lignes et quand je récupère les données, il ne lit que la première ligne.
Par exemple :
[section1]
donnée1=ligne1
ligne2
ligne3
donnée2=ligne4
ligne5
ligne6

Si je lui demande de récupérer la donnée1, il va lire juste ligne1 alors que je voudrais qu'il lise :
ligne1
ligne2
ligne3

Donc est-ce quelqu'un peut m'aider ? :mrgreen:

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 15:50
par jchd
Tu t'obstines à employer un format de fichier qui ne correspond pas à ton besoin.
Soit tu respectes la structure d'un fichier .ini de façon à pouvoir employer les fonctions Ini*() natives sans problème, soit tu t'inventes un format de fichier que tu penses adapté à ton besoin et tu te le gères "à la mimine" à coups de FileRead[Line], FileWrite[Line], avec passage par un tableau ou pas.

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 18:08
par mikell
TT22 tu sais que t'es lourd ? :mrgreen:

A standard ini file looks like:
[Section]
Key=Value

Tu DOIS respecter cette structure, ou alors comme dit le chef jchd, travaille avec un fichier txt !

Si tu écris ton ini comme ça :
[section1]
donnée1=ligne1#ligne2#ligne3
donnée2=ligne4#ligne5#ligne6

alors ce script marche :

Code : Tout sélectionner

$var = IniRead ("MonIni.ini", "section1", "donnée1", "" )
$read = StringSplit ($var, "#")
MsgBox(0,"", $read[1] & @CRLF & $read[2] & @CRLF & $read[3])
 
Tu peux aussi l'écrire comme ça :
[section1]
donnée1-1=ligne1
donnée1-2=ligne2
donnée1-3=ligne3
donnée2-1=ligne4
donnée2-2=ligne5
donnée2-3=ligne6

alors ce script marche :

Code : Tout sélectionner

$out = ""
$var = IniReadSection ("MonIni.ini", "section1" )
For $i = 1 To $var[0][0]
    If StringMid ($var[$i][0], 7, 1) = "1" Then $out = $out & $var[$i][1] & @CRLF
Next
MsgBox(0,"", $out)
 
Teste ces scripts, fais comme tu veux mais didiou RESPECTE la structure d'un ini :twisted:

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 18:19
par TT22
@ mikell :
Ta première solution me plait bien mais mais au bout de 1024 caractères, il retourne à la ligne :(

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 18:32
par jchd
oui et il y a d'autres limitations avec les fichiers .ini, selon les versions de système.
Cela rend la généralisation de leur emploi très délicate.

Si c'est pour stocker des données structurées et potentiellement volumineuses, mieux vaut utiliser SQLite. Au passage ça t'apprendra comment employer une base de données simple et puissante.

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 18:56
par mikell
Et mon 2ème script ?
Avec lui pas de longues lignes de caractères :wink:

Maintenant, je te signale que la première solution de jchd est de loin la meilleure (cf ma signature)
Si tu fantasmes sur les ini, rien ne t'empêche de faire un fichier txt et de lui donner l'extension .ini, tu auras un beau fichier avec une icone de ini et tu auras beaucoup plus de libertés avec les FileWrite(), FileWriteLine(), les fonctions String...() etc
:roll:

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 19:06
par TT22
Ouai, mais enfaite les données sont parfois définies par des fichiers et donc il faudrait que le saut de ligne soit automatisé (donnée1-1=ligne1 ; donnée1-2=ligne2 ; etc...)

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 19:10
par mikell
A chaque IniWrite() un nouveau couple "key=value" est écrit dans la section et le saut de ligne est alors automatique

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 19:11
par TT22
Un petit exemple ? :mrgreen:

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 19:32
par mikell
Tu exagères, tu es feignant comme une couleuvre... :x

Code : Tout sélectionner

For $i = 1 To 9
IniWrite ( "MonIni.ini", "section1", "donnée1-" & $i, "ligne" & $i )
Next

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 20:24
par TT22
Ok.
Et juste une dernière chose, comment on fait pour savoir le nombre de lignes qu'il y a dans un fichier ?

Edit : Enfait, j'ai trouvé :
#Include <File.au3>
_FileCountLines($sFilePath)

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 20:30
par mikell
Ben voilà, quand tu cherches tu trouves :wink:
Tu vas donc pouvoir passer ce post en "résolu"

Re: [..] Sauter des lignes dans un fichier ini

Posté : lun. 13 juin 2011 21:47
par TT22
Enfait, non je ne passe pas en résolut car lorsque j'utilise ça :
► Afficher le texte
Ça marche quand les lignes ont étés sautés volontairement mais lorsqu'il n'a plus de place et qu'il va à la ligne parce qu’il n'a pas le choix, il ne remet pas "donnée1-1=" par exemple. Il va directement à la ligne :(

En fait, ce qu'il faudrait ça serait que l'on dise que "donnée1=" va d'un certain signe à un autre.
Comme ça, y'a pas besoin de mettre touts les "donnée1-1" ; "donée1-2".

Par exemple, si on dit que le signe c'est #1234# alors donnée1 serat égale à :
donée1=#1234#ligne1
ligne2
ligne3#1234#

Re: [..] Sauter des lignes dans un fichier ini

Posté : mar. 14 juin 2011 11:54
par zeshrek
Ton #1234# on appele ca un séparateur.
Et ton :
[quote=TT22]En fait, ce qu'il faudrait ça serait que l'on dise que "donnée1=" va d'un certain signe à un autre.
Comme ça, y'a pas besoin de mettre touts les "donnée1-1" ; "donée1-2".

Par exemple, si on dit que le signe c'est #1234# alors donnée1 serat égale à :
donée1=#1234#ligne1
ligne2
ligne3#1234#[/quote]
on appele ca une description de ton format de fichier (quand on est gentil parceque bon, c'est quand même un peu light)
Bref, tu es en train de créer ton propre format d'enregistrement.
Alors le prend pas mal, mais vu que tu as pas l'air hyper au point je te suggère de suivre le conseil de jchd et de stocker tes données dans une BdD. Mais en tout cas laisse tomber le fichier ini, c'est pas fait du tout pour ce que tu veux fare.

Re: [..] Sauter des lignes dans un fichier ini

Posté : mar. 14 juin 2011 14:09
par TT22
Ouai, donc comment je fais ? :wink:

Re: [..] Sauter des lignes dans un fichier ini

Posté : mar. 14 juin 2011 14:51
par zeshrek
Le plus simple ? D'apres ce que tu en as dit, je vois bien une base de donnée avec juste une table contenant 2 champs (le premier contient un index, le second les données). Pour la base de données, a toi de voir, sqlite comme te propose jchd, ou un fichier (access, dbase, paradox, fox pro, etc... a toi de faire ton choix) que tu auras déclaré en source de données ODBC.

Re: [..] Sauter des lignes dans un fichier ini

Posté : mar. 14 juin 2011 15:13
par TT22
Donc comment je fais si je veux le faire avec un séparateur ?

Re: [..] Sauter des lignes dans un fichier ini

Posté : mar. 14 juin 2011 15:25
par jchd
Argh !

Bon je veux bien te faire un schéma SQLite quand j'aurai 5 minutes, mais il faudrait quand même que tu mettes un tant soit peu les pieds sur terre et nous dire exactement ce dont tu as besoin, parce que sinon on part dans un développement en spirale sans fin (et, entre-nous soit dit, un peu usant pour les nerfs).

Donc, essayant de poser une base, tu as besoin de stocker l'image d'une arborescence de répertoires et de fichiers avec leur contenu. OK, mais en quoi ce "machin" se différencie-t-il d'un volume FAT, XFAT, NFS ou NTFS ? A quoi ce bidule va-t-il te servir (sans indiscrétion, la question serait plutôt : "Comment comptes-tu l'exploiter ?") et quel intérêt présente-t-il par rapport à un système de fichiers ?

Re: [..] Sauter des lignes dans un fichier ini

Posté : mar. 14 juin 2011 16:13
par TT22
TT22 a écrit :Ouai, mais enfaite les données sont PARFOIS définies par des fichiers . . .
Parfois mais pas toujours :mrgreen:

Re: [..] Sauter des lignes dans un fichier ini

Posté : mar. 14 juin 2011 19:44
par mikell
jchd a écrit :Argh !
... un peu usant pour les nerfs
Bienvenue au club :mrgreen: