Pascal/Turbo Pascal - AYUDA -Archivos de texto

   
Vista:

AYUDA -Archivos de texto

Publicado por Mario (1 intervención) el 01/12/2007 20:51:44
hola, tengo que hacer un archivo de texto en el cual se graba el nombre du usuario y la contraseña, hasta ahi todo bien, pero cuando registro a un usuario, tengo que verificar que no exista otro con el mismo nombre. ahi es donde tengo el problema aca les paso el codigo para ver si me pueden ayudar.

program archivo;
uses
crt, dos;
var
datos: text;

procedure claves (var arch: text);
begin
assign (arch,'c:usuarios.txt');
{$I-}
reset (arch);
{$I+}
if ioresult<>0 then
rewrite (arch);
{** asigno el archivo de texto guardado en c:usuarios.txt
si nunca se ejecuto el programa lo crea, sino lo abre **}
close (arch);
end; {** claves **}

function valcontras :string;
var
validos: set of char;
car: char;
s: string [40];
i: integer;
begin
s:= '';
validos := ['A'..'Z',' ', 'a'..'z', '0'..'9' , #8 ];
car:= readkey;
repeat
if car in validos then
if car = #8 then
{** si apreto la tecla backspace (borrado) va a eliminar el ultimo
caracter que se copio **}
begin
delete (s, length(s), 1);
gotoxy (wherex-1, wherey);
write (' ');
gotoxy (wherex-1, wherey);
end {** del si (sobre la tecla backspace) **}
else {** si no apreto la palabra backspace) **}
begin
s:=s+car;
{** s se ira almacenando a medida que se presionen las teclas
terminadas por enter **}
write (car);
{** por pantalla saldra un asterisco (*) **}
end;
car:= readkey;
until (car= #13); {** el ciclo seguira hasta q apreto enter **}
for i:=1 to length(s) do
begin
s[i]:=upcase(s[i]); {** convierto todo en may£sculas **}
end;
valcontras:=S;
end;

function valnombre :string;
var
validos: set of char;
car: char;
s: string [40];
i: integer;
begin
s:= '';
validos := ['A'..'Z',' ', 'a'..'z', '1'..'9' , #8 ];
car:= readkey;
repeat
if car in validos then
if car = #8 then {** consideraciones sobre backspace (las mismas que en el proced. anterior) **}
begin
delete (s, length(s), 1);
gotoxy (wherex-1, wherey);
write (' ');
gotoxy (wherex-1, wherey);
end
else
begin
s:=s+car;
{**s se ira almacenando a medida que se presionen las teclas
terminadas por enter**}
write (car);
end;
car:= readkey;
until (car= #13); {** se repite hasta que se presione enter **}
for i:=1 to length (s) do
begin
s[i]:=upcase (s[i]); {** convierto en may£sculas **}
end;
valnombre:=s;
end;

procedure registrar (var arch: text);
var
s, espacio, nombre, contrasenia, contrasenia2: string;
i: byte;
begin
assign (arch, 'c:usuarios.txt'); {** asigno el archivo de texto al que almacena los datos **}
reset (arch);
repeat
writeln ('Ingrese nuevo nombre de usuario menor a 10 caract‚res');

nombre:=valnombre;

if length (nombre) > 10 then {** si el nombre tiene mas de diez caracteres lo advierte **}
begin
writeln;
writeln ('El nombre de usuario debe tener menos de 10 caract‚res (solo letras y n£meros)');
end;
writeln;
until length (nombre)<=10;
repeat
writeln ('Escriba contrase¤a menor a 8 caract‚res (solo letras y numeros)');
contrasenia:=valcontras;
if length (contrasenia) > 8 then
begin
writeln;
writeln ('La contrasenia debe tener menos de 8 caracteres');
end;
writeln;
until length(contrasenia)<=8; {** solo sigue si la contrase¤a tiene menos de ocho caracteres **}
writeln;
writeln ('Confirme su contrase¤a');
contrasenia2:=valcontras;
if contrasenia = contrasenia2 then {** si la contrase¤a es igual a la confirmaci¢n, sigue **}
begin
espacio:='';
repeat

if not eoln(arch) then {** mientras que no se termine la linea lee **}
begin
read (arch, s);
if s= nombre then
begin
writeln;

writeln ('El nombre de usuario ya existe, debe ingresar otro');
writeln;
writeln ('Presione una tecla para seguir');
end;
end {** fin del si no se termina la linea **}
else
begin
readln (arch, s);
readln (arch, s);
readln (arch, s);
if s= nombre then
begin
writeln;

writeln ('El nombre de usuario ya existe, debe ingresar otro');
writeln;
writeln ('Presione una tecla para seguir');
end
end; {** fin del si se termina la linea **}
until (eof(arch)) or (s=nombre); {** se va a terminar este ciclo si coinciden el nombre de usuario
o si se termina el archivo**}

if eof(arch) then {** salido por si el ciclo anterior termino por que se termino el archivo **}
begin
append (arch);
write (arch, nombre,'#');
write (arch, contrasenia,'#'); {** guardo nombre de usuario y contrase¤a de usuario**}
writeln (arch, espacio); {** dejo un espacio entre los nombres y contrase¤as de cada usuario **}
writeln;

writeln ('Nuevos datos guardados su nombre de usuario es ',nombre,' y su contrase¤a es ',contrasenia);
writeln;
writeln ('Presione tecla para terminar');
end;
end {** fin de la salida si la contrase¤a y la confirmaci¢n son iguales **}

else {** salida negativa, si la contrase¤a y la confirmaci¢n no son iguales **}
begin
writeln;

writeln ('Error: debe ingresar dos contrase¤as iguales');
writeln;
writeln ('Presione una tecla para continuar');
end;
close (arch);
readln;
end; {** fin de registrar **}

procedure menu1(var arch: text);
var
c: char;
begin
claves(arch);
repeat
clrscr;
gotoxy(22,5);
writeln (' MENU ');
gotoxy(22,6);
writeln (' ---- ');
gotoxy(5,8);
writeln(' 1_ Registrarse. ');
gotoxy(5,9);
writeln(' 2_ Ingresar. ');
gotoxy(5,10);
writeln(' 3_ Finalizar programa. ');
repeat
c:= readkey;
until (c>='1') and (c<'4');
write (c);
case c of
'1': begin { Para Calcular el factorial de un numero entero }
clrscr;
registrar(arch);
end; {fin mayor rendimiento}
'2': begin {Si se ingresa 2 el rendimiento promedio del campo}
clrscr;

end; { fin del rendimiento promedio}
'3':begin {Pasa a un vector las posiciones que estan por debajo}
{del promedio}
clrscr;
gotoxy(5,5);
writeln (' Fin programa ');
end;
end;
until c = '3';
end;

begin
menu1(datos);
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 -Archivos de texto

Publicado por Diego Romero (997 intervenciones) el 02/12/2007 04:59:54
La única forma de buscar un dato en un archivo de texto es leer el archivo secuencialmente hasta encontrar lo que buscas o llegar al final del archivo:

found:=false;
while (not eof(arch)) and (not found) do
begin
readln(arch, linea);
found:=existenombre(nombre,linea);
end;
if (found) then writeln(nombre,' ya existe')
else writeln(nombre,' no existe');

Aquí existenombre es una función que busca 'nombre' en el string 'linea', esta última es leída del archivo, y regresa un boolean.
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 -Archivos de texto

Publicado por azu (2 intervenciones) el 19/01/2009 20:06:41
como calcular el factorial de un numeroentero
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