Pascal/Turbo Pascal - AYUDA PARA SUBPROGRAMA

 
Vista:

AYUDA PARA SUBPROGRAMA

Publicado por j (5 intervenciones) el 10/01/2007 23:33:32
este es el subprograma en cuestion,
el formato de texto es el siguiente
mi subprograma deberia leer en el fichero FPlazas
5 Madrid;
pero lee Madrid;5 y al leer la anterior me da error
A ver si alguien me puede hechar un cable,gracias

Procedure LeerPlazas(Var FPlazas:Text;Var Reg:TRegCiudad;Var Lista:TPlazasCiu);
Var
C:char;
cont1,cont2,I:integer;
Begin
read(FPlazas,C);
cont2:=1;
while not EOF(FPlazas) do
begin
cont1:=1;
while (cont1<=25) and (C<>';') do
begin
Reg.Ciudad[cont1]:=C;
cont1:=cont1+1;
read(FPlazas,C)
end;
if cont1<25 then
for cont1:=cont1 to 25 do
Reg.Ciudad[cont1]:=' ';
readln(FPlazas,I);
read(FPlazas,C);
Reg.NumPlazas:=I;
Lista[cont2]:=Reg;
cont2:=cont2+1;
end;

end;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:AYUDA PARA SUBPROGRAMA

Publicado por Diego Romero (996 intervenciones) el 11/01/2007 03:50:50
Si FPlazas es de tipo text debes usar ReadLn para leer una línea, además la variable que recibe lo leído debe ser de tipo string y no char. Ese es el principal problema que tiene este procedimiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA PARA SUBPROGRAMA

Publicado por j (5 intervenciones) el 11/01/2007 07:25:45
Muchas gracias.
La cuestión es que al leer 5 Madrid; debería separar el campo 5, y Madrid en otro campo, metiendo 5 en plazas disponibles y Madrid en ciudad.
Yo creo que está mal la condición,porque si en lugar d poner 5 Madrid;pongo Madrid;5 si me separa los campos.
No se como podria poner para leer hasta caracter en blanco para almacenar el 5, y luego que siga leyendo hasta ; para que coja madrid con un readline.
gracias d antemano
....
Var
C:char;
cont1,cont2,I:integer;
Begin

read(FPlazas,C);
cont2:=1;
while not EOF(FPlazas) do
begin
cont1:=1;
-------> while (cont1<=25) and (C<>';') do
begin
Reg.Ciudad[cont1]:=C;
cont1:=cont1+1;
read(FPlazas,C)
end;
if cont1<25 then
for cont1:=cont1 to 25 do
Reg.Ciudad[cont1]:=' ';
readln(FPlazas,I);
read(FPlazas,C);
Reg.NumPlazas:=I;
Lista[cont2]:=Reg;
cont2:=cont2+1;
end;

end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA PARA SUBPROGRAMA

Publicado por Diego Romero (996 intervenciones) el 11/01/2007 16:28:07
No me queda claro ¿qué contiene el archivo exactamente?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA PARA SUBPROGRAMA

Publicado por j (5 intervenciones) el 11/01/2007 16:33:03
contiene estos campos
5 Madrid; siendo 5 el numero de plazas disponibles
y Madrid la ciudad
ese es el contenido del fichero y no lo lee.
sin embargo
modifico el contenido y pongo Madrid;5 y si lo lee pero el contenido debe ser el otro.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA PARA SUBPROGRAMA

Publicado por Diego Romero (996 intervenciones) el 11/01/2007 17:45:13
Si ese es el contenido entonces...

var
Arch: Text;
PrimerCampo, SegundoCampo: string;

function TomarPrimerCampo(S: string):string;
var
Result: string;
i,j: integer;
begin
Result:='';
j:=Pos(' ',S);
i:=1;
while i<j do
begin
Result:=Result+S[i];
inc(i);
end; { while }

TomarPrimerCampo:=Result;

end;

function TomarSegundoCampo(S: string):string;
var
Result: string;
i: integer;
begin
Result:='';
i:=Pos(' ',S);
inc(i);
while i <length(S) do
begin
Result:=Result+S[i];
inc(i);
end; { while }

TomarSegundoCampo:=Result;

end;

begin
Assign(Arch,'datos.txt');
Reset(Arch);
ReadLn(Arch,Linea);
while not Eof(Arch) do
begin
PrimerCampo:=TomarPrimerCampo(Linea);
SegundoCampo:=TomarSegundoCampo(Linea);
{ Aquí ya puedes hacer con esos datos lo que quieras }
ReadLn(Arch,Linea);
end; { while }
Close(Arch);
end.

Conste que esto funciona con el formato tal y como me lo pasaste.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA PARA SUBPROGRAMA

Publicado por Uno que pasaba por aquí.. (2 intervenciones) el 12/01/2007 10:12:45
Cabe matizar que el número 5 ha de ser guardado en un registro, apartado o como quieras llamarlo de tipo integer, porque luego hay que operar con él y sino......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA PARA SUBPROGRAMA

Publicado por Uno que pasaba por aquí.. (2 intervenciones) el 12/01/2007 10:10:24
Para leer hasta caracter en blanco, por ejemplo puedes poner lo siguiente:

Repeat read(Fplazas, c) Until c=Espacio;
(*Siendo espacio una constante declarada Espacio=' '; *)

Aunque no te lo aconsejo por si la ciudad consta de nombre compuesto(Ciudad Real) separado por espacio.

No sé cuál práctica de las 3 te ha tocado, pero creo que en ninguna de las tres se usa un espacio como separador de campos, sino el punto y coma, y lo único que cambia es el órden en el que aparecen los datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA PARA SUBPROGRAMA

Publicado por j (5 intervenciones) el 12/01/2007 15:40:23
Muchas gracias
tengo la 2.2 y si se usa el espacio como separador de campos, o eso pone en el enunciado. Mil gracias en serio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA PARA SUBPROGRAMA

Publicado por Lucia Vilar (17 intervenciones) el 12/01/2007 16:45:20
Hola, yo tengo la 3.3 y no pone nada de los espacios para separar los campos, simplemente pone que se indican las plazas y a continuación la ciudad, no indica explícitamente los espacios. es más fácil si no tienes el espacio en medio. Los centinelas que han metido en el enunciado (' ; ', '*' ) son precisamente para ahorrarnos el trabajo y el problema de los espacios. Sirven de ayuda como separadores de campos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA PARA SUBPROGRAMA

Publicado por Anonimous (7 intervenciones) el 13/01/2007 12:12:56
Vale, es que no estaba enterado del resto de enunciados y eso...pero que de todas formas el token que pongan es cuestion de meterlo y comprobar y ya..
Ahora que si es el espacio, para las ciudades de nombres compuestos os han hecho toda la picia..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar