Greco
03-09-2008, 02:00:04
Hola a todos, tengo el siguiente problema al utilizar una funcion que encontre en los trucos de clubdelphi, la funcion extrae una subdacena.
(extraida de los trucos de clubdelphi)
function GetText(s: string; Indice: Byte;Separador:string='|'): string;
var i:Integer;
tmp:string;
begin
i:=1;
while i<=Indice do
begin
Delete(s,1,Pos(Separador,s));
Inc(i);
end;
if Pos(Separador,s)<>0 then
tmp:=Copy(s,1,Pos(Separador,s)-1)
else
tmp:=s;
if Length(tmp)=0 then
tmp:=EmptyStr;
Result:=tmp;
end;
// Para utilizarlo...
GetText('12345|aeiou|a1s2d3f4',1);
//nos devuelve 'aeiou'
Si la utilizo asi sola no tengo problemas, me funciona correctamente,
el problema se presenta cuando llamo a la funcion dentro del codigo de un stringlist, me explico:
procedure Log(Str: String; Archivo: String);
begin
// Creamos el objeto
with TStringList.Create do
try
try
// Intentamos cargar el archivo
If FileExists(Archivo) then LoadFromFile(Archivo);
except
// Si no podemos ignoramos el error
end;
// Si ya hay lineas
if Count > 0 then
// Comprobamos si la ultima es igual a la que queremos introducir
if Strings[Count-1] = Str then
Exit; // Si lo es salimos
// Dejamos solo las cuatro ultimas lineas
while Count > 9 do
Delete(0);
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// lo siguiente es por si le quiero anteponer la hora (el caracter | es para separar la hora de la cadena
//Add(FormatDateTime('hh:nn:ss',now())+'|'+Str);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// si utilizo la linea anterior elimino la siguiente
Add(Str);
// Por ultimo guardamos el archivo
SaveToFile(Archivo);
finally
Free;
end;
end;
La funcion anterior la obtube en este foro con la ayuda de la comunidad, su funcion es:
- recibe una cadena
-abre un archivo que almacena siempre 5 lineas...
-compara la ultima linea con la cadena que recibio la funcion, si son iguales no hace nada, si son distintas almacena la cadena al final del archivo y elimina la primera linea, con lo cual siempre el archivo va a mantener 5 lineas.
yo le agregue la parte que esta entre //++++++ para a parte de guardar la cadena, tambien me guarde la hora en que recibe la cadena, por ejemplo:
17:45:23|la cadena
17:46:41|otra cadena
pero se me presentó un problema, al comparar la cadena que recibe la funcion con la ultima linea almacenada en el archivo, siempre va a detectar que son distintas ya que compara la linea completa, con la hora incluida, una solucion que encontre fue la funcion que puse al principio de este mensaje, la enocntre en los trucos de esta pagina.
Lo que hace es separar la cadena por algun caracter especifico, en este caso "|" y me entrega el indice deseado, en mi caso para la siguiente cadena:
17:45:23|la cadena
llamaría a la funcion GetText('17:45:23|hola mundo',1) y obtengo 'hola mundo'
si lo hago manualmente en un form muevo, me funciona correctamente pero si lo incluyo detro de la funcion anterior me da el siguiente error: "too many actual parameters", pienso yo que debe ser por que esta dentro del codigo del stringlist, no se por que pero se me ocurre que por ahi debe andar el problema (disculpen mi ignorancia).
No se como poder solucionarlo.
Espero que se haya entendido mi mensaje, cualquier duda estare atento al foro para dar mas detalles. Estaré agradecido a cualquier ayuda :D
Saludos
(extraida de los trucos de clubdelphi)
function GetText(s: string; Indice: Byte;Separador:string='|'): string;
var i:Integer;
tmp:string;
begin
i:=1;
while i<=Indice do
begin
Delete(s,1,Pos(Separador,s));
Inc(i);
end;
if Pos(Separador,s)<>0 then
tmp:=Copy(s,1,Pos(Separador,s)-1)
else
tmp:=s;
if Length(tmp)=0 then
tmp:=EmptyStr;
Result:=tmp;
end;
// Para utilizarlo...
GetText('12345|aeiou|a1s2d3f4',1);
//nos devuelve 'aeiou'
Si la utilizo asi sola no tengo problemas, me funciona correctamente,
el problema se presenta cuando llamo a la funcion dentro del codigo de un stringlist, me explico:
procedure Log(Str: String; Archivo: String);
begin
// Creamos el objeto
with TStringList.Create do
try
try
// Intentamos cargar el archivo
If FileExists(Archivo) then LoadFromFile(Archivo);
except
// Si no podemos ignoramos el error
end;
// Si ya hay lineas
if Count > 0 then
// Comprobamos si la ultima es igual a la que queremos introducir
if Strings[Count-1] = Str then
Exit; // Si lo es salimos
// Dejamos solo las cuatro ultimas lineas
while Count > 9 do
Delete(0);
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// lo siguiente es por si le quiero anteponer la hora (el caracter | es para separar la hora de la cadena
//Add(FormatDateTime('hh:nn:ss',now())+'|'+Str);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// si utilizo la linea anterior elimino la siguiente
Add(Str);
// Por ultimo guardamos el archivo
SaveToFile(Archivo);
finally
Free;
end;
end;
La funcion anterior la obtube en este foro con la ayuda de la comunidad, su funcion es:
- recibe una cadena
-abre un archivo que almacena siempre 5 lineas...
-compara la ultima linea con la cadena que recibio la funcion, si son iguales no hace nada, si son distintas almacena la cadena al final del archivo y elimina la primera linea, con lo cual siempre el archivo va a mantener 5 lineas.
yo le agregue la parte que esta entre //++++++ para a parte de guardar la cadena, tambien me guarde la hora en que recibe la cadena, por ejemplo:
17:45:23|la cadena
17:46:41|otra cadena
pero se me presentó un problema, al comparar la cadena que recibe la funcion con la ultima linea almacenada en el archivo, siempre va a detectar que son distintas ya que compara la linea completa, con la hora incluida, una solucion que encontre fue la funcion que puse al principio de este mensaje, la enocntre en los trucos de esta pagina.
Lo que hace es separar la cadena por algun caracter especifico, en este caso "|" y me entrega el indice deseado, en mi caso para la siguiente cadena:
17:45:23|la cadena
llamaría a la funcion GetText('17:45:23|hola mundo',1) y obtengo 'hola mundo'
si lo hago manualmente en un form muevo, me funciona correctamente pero si lo incluyo detro de la funcion anterior me da el siguiente error: "too many actual parameters", pienso yo que debe ser por que esta dentro del codigo del stringlist, no se por que pero se me ocurre que por ahi debe andar el problema (disculpen mi ignorancia).
No se como poder solucionarlo.
Espero que se haya entendido mi mensaje, cualquier duda estare atento al foro para dar mas detalles. Estaré agradecido a cualquier ayuda :D
Saludos