writestring dans fichier comment insérer et non remplacer

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

writestring dans fichier comment insérer et non remplacer

Message 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 ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

T'es obligé de tout ré-écrire, fait une routine.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message 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.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Répondre