PDA

Ver la Versión Completa : Borrar Clave o Seccion de un archivo INI


martini002
23-09-2012, 03:25:31
Saludos Amigos, donde quiera que se encuentren,

en esta oportunidad quisiera saber si existe la posibilidad
de borrar una seccion de un archivo INI, pero! he aqui la cuestion:

Tenemos una seccion

[Core.System]
CacheExt=.uxx
Paths=../Classes/*.u
Suppress=ScriptWarning
Suppress=WindowedMode

y necesito borrar este: "Suppress=WindowedMode" o colocarle un ";"
al inicio para comentarlo ";Suppress=WindowedMode"

probe con esto pero no funciono, quiza porque hay dos que se llaman igual
alguna idea?
Gracias infinitas :)

procedure TForm1.Button7Click(Sender: TObject);
var
Ini:TIniFile;
begin
//Suppress=WindowedMode
Ini:= TIniFile.Create(Getcurrentdir()+'\File.Ini');
Ini.DeleteKey('Core.System', 'Suppress');
end;

Casimiro Notevi
23-09-2012, 10:10:27
probé con esto pero no funcionó, quizá porque hay dos que se llaman igual, ¿alguna idea?
Sí, cámbiale el nombre :D

En serio, no pueden tener el mismo nombre, ¿cómo los diferencias?

Algo que puedes hacer es ponerlo en otra sección, ejemplo:

[Core.System]
CacheExt=.uxx
Paths=../Classes/*.u
Suppress=ScriptWarning

[Core.System2]
Suppress=WindowedMode


Saludos.

escafandra
23-09-2012, 13:09:03
Si estás obligado a hacer eso por código, puedes abrir el archivo y leerlo en un TStringList, buscar la línea o líneas que te interesen y borrarlas... Luego lo guardas en disco...


Saludos.

martini002
23-09-2012, 19:23:41
Gracias Roman pero no puedo desarmarlo :/
porque esto sera una aplicacion que haga eso mismo .
en un numero desconocido de computadoras
voy a probar con el TStringList y luego guardarlo en disco.

Saludos, Gracias

martini002
24-09-2012, 03:01:44
Bueno estuve leyendo un poco sobre los TStringList
y di al final con este codigo, pero esta presentando un pequeño problema
y realmente no tengo idea de que sera, ya que no se como funciona exactamente el TStringList
La cuestion es que la Variable Posicion comienza en 0 despues de la primera comparacion
cambia a 320 y entra como en un loop infinito algo asi

hechenle un ojito a ver si encuentran algo extraño
Saludos, Gracias!


procedure TForm1.Button7Click(Sender: TObject);
var
ATemporal:TStringList;
Posicion:Integer;
BorrarKey:Boolean;
begin
ATemporal:= TStringList.Create;
ATemporal.LoadFromFile('F:\File.Ini');
for Posicion:= 0 to ATemporal.Count do
begin
//Posicion vale 0
BorrarKey := ATemporal.Find('Suppress=WindowedMode', Posicion);
//Posicion vale 320 ahora...
if BorrarKey=True then
begin
ATemporal.Delete(Posicion);
DeleteFile('F:\File.Ini');
ATemporal.SaveToFile('F:\File.Ini');
end;
end;
end;


Intentanto con un While para usar el contador tenemos:


Posicion:=50;
while Posicion < 100 do
begin
BorrarKey := ATemporal.Find('Suppress=WindowedMode', Posicion);//Aqui cambia a 320 igual
Posicion:=Posicion+1;

martini002
24-09-2012, 05:06:18
Bueno encontre una solucion a esto
puede ser optimizada pero tengo sueño y no quiero jum :(
igual se las dejo aqui para quien pueda servirle,
Gracias infinitas por su tiempo
Saludos


Posicion:=50;
Temp:='Suppress=WindowedMode';
while Posicion < 100 do
begin
if ATemporal[Posicion]=Temp then
begin
ATemporal.Delete(Posicion);
DeleteFile('F:\File.Ini');
ATemporal.SaveToFile('F:\File.Ini');
end
Else
begin
Posicion:=Posicion+1;
end;
end;

escafandra
24-09-2012, 11:29:26
Ejemplo sencillo:

var
i: integer;
begin
with TStringList.Create do
begin
LoadFromFile('Doc.ini');
i:= IndexOf('Suppress=WindowedMode');
if i>=0 then
begin
Delete(i);
SaveToFile('Doc2.ini');
end;
free;
end;
end;


Saludos.