Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ayuda con arvhivos de textos y arreglos en delphi (https://www.clubdelphi.com/foros/showthread.php?t=72247)

twister 06-02-2011 03:13:00

ayuda con arvhivos de textos y arreglos en delphi
 
Hola mundo.! tengo un problemilla.! :D tengo esta cadena : < hola> <mundo> y quiero guardar "hola" en una variable y "mundo" en otra.! eliminando los delimitantes <>.! por favor ayudenme.! :confused:

ecfisa 06-02-2011 03:45:10

Hola twister y bienvenido a Club Delphi.

Código Delphi [-]
procedure QuitarMayorMenor(const Value: string; var s1,s2: string);
var
  i: Integer;
begin
  s1:= '';
  for i:= 1 to Length(Value) do
    if not(Value[i] in ['<', '>']) then
      s1:= s1 + Value[i];
  s2:= Copy(s1, Pos(' ', s1)+1, MaxInt);
  Delete(s1, Pos(' ', s1), MaxInt);
end;

Llamada de ejemplo:
Código Delphi [-]
...
var
  Cad1,Cad2: string;
begin
  QuitarMayorMenor(' ',Cad1,Cad2);
  ShowMessage(Cad1+#10#13+Cad2);
end;
...

Un saludo.

twister 06-02-2011 04:25:56

ayudamee :S
 
bueno gracias!! pero no me funciono!! en realidad leo de un archivo de trexto esta cadena HOLA MUNDO <var1> <var2> necesito sacar var1 y var2 para utilizarlas dentro del programa... el q tu me enviastes lo use pero no me arroja nada!! :(

twister 06-02-2011 04:38:09

...
 
mira esto es lo q utilizo para q me devuelva el valor,

procedure ExtraeCadena(cadena: string): string;
begin
result:=copy(cadena,pos('<',cadena)+1,pos('>',cadena)-pos('<',cadena)-1);
end;

pero solo lo hace para "var1" y no me trae "var2" puedes revisarlo a ver si se puede hacer de la misma forma para traer var2??

ecfisa 06-02-2011 04:49:23

Hola de nuevo.

El procedimiento que te puse funciona correctamente para la petición que hiciste en el primer mensaje quitando los símbolos < y > y almacenando en dos variables las dos cadenas que están separadas por un espacio.

En el ejemplo de llamada apareció un ' ' y no '<hola> <mundo>' por un problema que provocan los símbolos '< >' dentro de las etiquetas [delphi] y [/delphi] . Si ponés el texto dentro de las comillas simples, funcionará.

Te pongo otro ejemplo con una tercera variable que supuestamente tendría almacenada la cadena leida del archivo de texto:
Código Delphi [-]
...
var
  Cad1,Cad2, Txt: string;
  ...
begin
  Txt:= 'menor_hola_mayor menor_mundo_mayor'; // reemplaza menor_ y _mayor por sus símbolos correspondientes
  QuitarMayorMenor(Txt , Cad1,  Cad2);
  ShowMessage(Cad1 + #10#13 + Cad2);
end;
...

El procedimiento sigue siendo el mismo.


Un saludo.

twister 06-02-2011 05:01:02

o.o
 
no me funciona :S tal vez no entiedas lo q en realidad quiero hacer!! o.o

twister 06-02-2011 05:03:12

o.o
 
podrias agregarme al msn para explicar bien!! :D

ecfisa 06-02-2011 05:13:41

Hola.

Hice la prueba y funciona correctamente de acuerdo a la condicion que expusiste: <cadena1> espacio <cadena2>.

Para comprobarlo, copia y pega lo siguiente:
Código:

procedure QuitarMayorMenor(const Value: string; var s1,s2: string);
var
  i: Integer;
begin
  s1:= '';
  for i:= 1 to Length(Value) do
    if not(Value[i] in ['<', '>']) then
      s1:= s1 + Value[i];
  s2:= Copy(s1, Pos(' ', s1)+1, MaxInt);
  Delete(s1, Pos(' ', s1), MaxInt);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  Cad1,Cad2, st: string;
begin
  st:= '<hola> <mundo>';
  QuitarMayorMenor(st ,Cad1, Cad2);
  ShowMessage(Cad1+#10#13+Cad2);
end;

Usé otras etiquetas, para que puedas copiar y pegar el ejemplo tal como es.


Nota: Si lees la guía de estilo , verás que dice: No solicites que te respondan por correo en privado.
(Por lo que borro el mismo de tu mensaje anterior)


Un saludo.

twister 06-02-2011 05:21:58

o.o
 
hola :D

ups sorry no sabia!! xD bueno dejame probar ese para ver :D gracias!! :rolleyes:

ecfisa 06-02-2011 05:24:44

No hay problema twister, ya irás familiarizandote con el estilo y las etiquetas.;)

Cualquier problema que tengas, seguí presentándolo.

Un saludo.:)

twister 06-02-2011 05:40:42

o.o
 
ok esta bien!! bueno creo q no me explique y me enviaste unas soluciones a o:Dtro problema :( pero creo q si me dices como introducir cada palabra de la cadena q leo del archivo en un arreglo tambien solucionaria mi problema!! ejemplo

si tengo HOLA MUNDO <var1> <var2>

entonces necesito q HOLA ESTE EN LA PRIEMRA POSICION DEL ARREGLO

MUNDO en la segunda posicion

<var1> en la tercera posicion!!

<var2> en la cuarta posicion!!

sin importar espacios entre las palanbras....... :D

lo q en realidad necesito traer toda la linea del archivo para verificar su sintaxis y ver si esta bien escrita.... var1 y var2 son valores enteros q debo extraer para hacer operaciones en el programa...

y disculpa la molestia :)

ecfisa 06-02-2011 06:45:12

Cita:

Empezado por twister (Mensaje 390106)
pero creo q si me dices como introducir cada palabra de la cadena q leo del archivo en un arreglo tambien solucionaria mi problema!!

Hola twister, no es ninguna molestia.

A ver si de este modo te sirve:
Código Delphi [-]
function LineasAPalabras(const: NomArch: string; Delimitador: Char): TStrings;
var
  Txt: TextFile;
  TS: TStrings;
  st, Linea: string;
begin
  AssignFile(Txt, NomArch);
  Reset(Txt);
  st:= '';
  while not Eof(Txt) do
  begin
    Readln(Txt, Linea);
    st:= st + Linea;
  end;
  CloseFile(Txt);
  Result:= TStringList.Create;
  Result.Delimiter:= Delimitador;
  Result.DelimitedText:= st;
end;

Ejemplos de uso:
Código Delphi [-]
...
begin
  try
    TS:= TStringList.Create;
    TS:= LineasAPalabras('C:\TU_ARCHIVO.TXT',' '); // TS[0] = primer palabra, ...,  TS[TS.Count-1] = última palabra
    // Acceder a cada una de las palabras
    for i:= 0 to TS.Count - 1 do
      ShowMessage(TS[i]);  // aca haces lo que gustes
  finally
    TS.Free;
  end;
end;

Otro ejemplo:
Código Delphi [-]
     Memo1.Lines:= LineasAPalabras('C:\TU_ARCHIVO.TXT',' ');

La función requiere que le envíes el nombre del archivo (Ruta+Nombre) y el delimitador que usará para distinguir una palabra de otra.

Un saludo.

twister 06-02-2011 06:58:53

o.o
 
copie todo tal cual!! y bueno ya habia usado varias funciones pero no me sirven! :S me dicen q hay error indentifier expected but ':' found despues de la const: se q es algo con los 2 puntos pero cualquier funcion q pongo me da error :S

ecfisa 06-02-2011 08:00:03

Te pido mil disculpas twister, el error de tipeado es mio !!!! :(

Quitá los dos puntos luego de const.

La línea tiene que quedar:
Código Delphi [-]
function LineasAPalabras(const NomArch: string; Delimitador: Char): TStrings;


Un saludo.

twister 08-02-2011 01:02:36

o.o
 
hola ecfisa como estas? :D

pudimos correr el codigo pero cuenta todas las palabras q hay en el arcihivo y en realidad no necesitamos eso!! solo necesito q guarde las palabras de la primera linea y despues para la segunda linea q empiece desde 0 otra vez el contador para guardar las palabras q hay en la segunda linea!!!

ejm:

si en la primera linea hay cuatro palabras el va a guardar esas palabras y necesitamos comparar cada una de las palabras con otras palabras q tengo.

y el codigo q tu nos mandastes cuentas las palabras y las guarda pero si en la primera linea hay 4 palabras esta bien las cuenta, pero al bajar a la segundo linea empieza a contar desde el 4 para adelante.

osea q si entre la primera y la sengunda linea hay 8 palabras el valor de [i] va a llegar hasta 8... ME EXPLICO???

twister 08-02-2011 02:46:32

ayuda con arvhivos de textos y arreglos en delphi
 
hola alguien sabe de alguna funcion en delphi que pueda leer una linea desde un archivo de texto y guardar cada palabra en una posicion de un ARREGLO?? ojo es un arreglo no necesito listas!! las lineas en el arvhico pueden ser N lineas y cada linea puede tener N palabras. agradeceria su ayuda... :)

ecfisa 08-02-2011 03:21:50

Hola twister.

Por favor no repitas mensajes.
Un mensaje tuyo con igual contenido estaba en el foro 'noticias' con el título ":(" que por otro lado, nada tiene que ver con tu consulta.
Muchas gracias.

Saludos.

twister 08-02-2011 04:00:35

O.o
 
Es que no se como eliminarlo..!

ecfisa 08-02-2011 05:23:28

Hola tiwster.

No, no podés eliminarlo una vez enviado, no te preocupes ya irás manejando el tema. Sólo te lo hago presente para que lo tengas en cuenta en el futuro.

Ahora a lo nuestro, no te sirvió el ejemplo con TStrings... :)

Bueno, aca te hice un ejemplo con un arreglo y te agregué comentarios en las líneas como mejor pude:
Código Delphi [-]

const
   MAXPALABRAS = 5000;

var
  v: array[1..MAXPALABRAS] of string;
 ix: Integer;

procedure TForm1.LineaAPalabras(NomArch: string);
var
  F: TextFile;
  p: Integer;
  s: string;
begin
  AssignFile(F, NomArch);  // asociár archivo a 'F'
  Reset(F);                // abrir para lectura
  ix:= 0;                  // inicializar indice arreglo
  while not Eof(F) do      // mientras no fin de archivo
  begin
    ReadLn(F, s);          // leer una línea
    s:= s + ' ';           // para obtener última palabra
    p:= Pos(' ', s);       // 1er palabra
    while p <> 0 do        // mientras haya palabras
    begin
      Inc(ix);                   // incrementar posición en arreglo
      v[ix]:= Copy(s, 1, p);    // guardar en arreglo
      s:= Copy(s, p+1, MaxInt); // quitar guardado
      p:= Pos(' ', s);          // proxima palabra
    end; // p<>0
  end;   // not Eof(F)
  CloseFile(F);           // cerrar archivo
end;

Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
begin
  LineaAPalabras('PRUEBA.TXT');
  Memo1.ScrollBars:= ssVertical;
  Memo1.Clear;
  for i:= 1 to ix do
    Memo1.Lines.Add(v[i]);
end;

No lo creo, pero por si tenés algún problema, te adjunto el ejemplo funcionando.

Un saludo.


La franja horaria es GMT +2. Ahora son las 04:50:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi