Page 1 sur 1

writestring dans fichier comment insérer et non remplacer

Publié : ven. 16/sept./2005 7:14
par Thyphoon
voici un code qui lit un fichier ini

Code : Tout sélectionner

key.s="screen_aspect"
val.s="TESTDEREMPLACEMENT"
OpenFile(0,"MAME.ini")
While Eof(0) = 0 Or keyfound.s=key
l=Loc()
chaine$=ReadString()
keyfound.s=Trim(Mid(chaine$, 1, 24))
If keyfound=key
Debug "coucou"
  FileSeek(l+24)
  WriteString(val)
EndIf
Wend
CloseFile(0)
voici un bout du
Mame.ini

Code : Tout sélectionner

ddraw                   1
direct3d                0
hwstretch               1
# screen                <NULL> (not set)
cleanstretch            auto
resolution              auto
refresh                 0
scanlines               0
switchres               1
switchbpp               1
maximize                1
keepaspect              1
matchrefresh            0
syncrefresh             0
throttle                1
full_screen_brightness   0.000000
frames_to_run           0
effect                  none
screen_aspect           4:3

## Windows Direct3D 2D video options ###
zoom                    2
d3dtexmanage            1
d3dfilter               1
d3dfeedback             0
d3dscan                 100
d3deffectrotate         1
d3dprescale             auto
or lorsque j'execute mon code du coup ça modifie le fichier comme suit

Code : Tout sélectionner

effect                  none
screen_aspect           TESTDEREMPLACEMENT
rect3D 2D video options ###
vous voyez mon problème ?
quelqu'un a une idée ?

Publié : ven. 16/sept./2005 11:32
par nico
T'es obligé de tout ré-écrire, fait une routine.

Publié : ven. 16/sept./2005 12:50
par Thyphoon
Oui c'est ce que j'ai fait...mais je pensais qu'on pouvait faire plus rapide Car quand tu met a jour une variable...tu réécrie autant de fois le fichier que le nombre de mot clef... Mais c'est pas trop grave :oP Merci entout cas

Publié : ven. 16/sept./2005 15:37
par nico
Pour aller plus vite, il faut remplacer et non insérer:

La clé ne changeant pas, pas de problème; mais pour sa valeur associée il faut réservée l'espace nécessaire au nombre max d'octets que tu rempliras.

Si tu rentres une donnée inférieur, comblée le manque d'octets avec autant d'espace que nécessaire.

C'est pas très compliqué, par contre si tu veux ajouté une nouvelle clé, soit tu prévoies l'espace nécessaire, soit tu ré-écris le fichier.

Publié : ven. 16/sept./2005 17:55
par Thyphoon
Oui c'est ce que j'ai finit par conclure !
finalement j'ai fait comme tu m'as dit je réécris le fichier, et c'est même plus rapide que je l'aurais penser ...
En tout cas merci de l'aide :P

Publié : sam. 17/sept./2005 17:37
par fweil
Le truc est simple en fait, si tu veux remplacer dans un fichier par des données qui occupent la même place que les données d'origine, tu peux utiliser un OpenFile() mais si tel n'est pas le cas, il vaut mieux ré-écrire le fichier sinon la gestion de pointeur dans le fichier est assez compliquée.

Dans tous les cas, il faut se rappeler qu'un fichier d'une taille inférieure ou égale à la dimension d'une page mémoire ne prend pas beaucoup de temps à être lu ou écrit.