Ver Mensaje Individual
  #7  
Antiguo 15-07-2003
nachoasensio nachoasensio is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 61
Reputación: 24
nachoasensio Va por buen camino
Efectivamente, cadetill tiene razón (eso me pasa por no dedicar más tiempo a pensar en el problema y responder demasiado deprisa).

Otra posible solución es declarar el fichero FileReg directamente como TextFile y "esconder" el número en el propio fichero, delimitado por un par de caracteres que no se utilicen en el fichero, por ejemplo |45|.´Creo que es la solución más sencilla. La primera línea contiene el número, las siguientes contienen el texto, hasta que se encuentre el delimitador; éste indicará que estamos ante otro registro; es decir:

|45|
dhjfsd sdjklh sdh fs fsd fsld fl sdfsdh fhsdf
sdfs
df
sdf
sdf
sdfsd fgasd fsdjfgsd fjgs d fs
|34|
dfl´ñskd f sdfj sdklñfañs ñfasdññfasñdfsadf
asd f
asd
fa
sd
fsdf asdjkl fasdjklfasd f
ds
fda
s fasd
|27|
sdjk fksf
sdfsd
f
d
s
f


Meter la información es ahora trivial. Para sacarla basta ir buscando la letra '|' con Pos, con algo como:

Memo1.Lines.LoadFromFile('..........');

Texto := Memo1.Text;
cont := 1;

//1ª aparición de '|'
Pos1 := Pos('|', Texto);

while (Pos1 > 0) do
begin

// 2ª aparición de '|'
Pos2 := Pos('|'+Chr(13)+Chr(10), Texto);

//Extraemos el núm. Numero[i] es un array de enteros
Numero[cont] := StrToInt(Copy(Texto, Pos1+1, Pos2-1));

// Eliminamos el '|nº|'+Salto de línea
Texto := Copy(Texto, Pos2+3, Length(Texto));

// Buscamos el siguiente '|'
Pos1 := Pos('|', Texto);

if Pos1 > 0 then
//Extraemos el texto del registro cont
Contenido[cont] := Copy(Texto, 1, Pos1-3); // El -3 es para
// eliminar el salto de línea tras el texto

// Incrementamos el contador
INC(cont);
end; // del while


Tras el bucle en Numero[i] están los números y en Contenido[i] están los contenidos. Hay que iterar desde 1 hasta cont-1.

Nota: el código lo he escrito al vuelo, a lo mejos se me ha pasado algo.

Espero que, ahora sí , te sirva.

Un saludo

Nacho
Responder Con Cita