Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-06-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Exclamation Problema con salto de linea, ayuda please!

Estoy haciendo un programa, que lee de un fichero de texto, y necesito enterarme cuando lee un salto de linea, para hacer unas cosas, el hecho es que no se como enterarme de ello, ya que no se comparar lo que leo con un salto de linea.

Quiero hacer algo tal que asi:

while not eof (fichero) do begin

read (fichero, caracter);

if caracter = "salto de linea" then

procedure........ end;

¿Como hago esa comparacion ("if caracter = "salto de linea")?


muchas gracias.
Responder Con Cita
  #2  
Antiguo 02-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
En windows el salto de linea se corresponde con dos caracteres #13 y #10, en otros sistemas como linux solo se utiliza el #10.

Es decir:
Código Delphi [-]
if caracter = #10 then
Responder Con Cita
  #3  
Antiguo 04-06-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Exclamation

He puesto lo que me habeis dicho y el programa no funciona, os paso el codigo a ver si me podeis ayudar, lo que quiero es que cuando encuentre un 'do' y luego venga un salto de carro lo transforme a 'DO'

Código Delphi [-]
UNIT unit_do;

INTERFACE

  TYPE
    fichero = text;

  VAR
    f, FF: fichero;
    nombreFichero: STRING;
    letra1, letra2, letra3: char;

PROCEDURE MAYUSdo (VAR f, FF: fichero; nombreFichero:STRING);

IMPLEMENTATION

PROCEDURE MAYUSdo (VAR f, FF: fichero; nombreFichero:STRING);
  BEGIN
    WHILE (NOT eof (f)) DO
      BEGIN
        read (f, letra1);
        IF letra1 = 'd' THEN
          BEGIN
            read (f, letra2);
            IF letra2 = 'o' THEN
              BEGIN
                read (f, letra3);
                IF letra3 = #10 THEN
                  BEGIN
                    write (FF,'D');
                    write (FF, 'O');
                    write (FF, ' ');
                  END
                ELSE
                  BEGIN
                    write (FF, letra1);
                    write (FF, letra2);
                    write (FF, letra3);
                  END;
              END
          ELSE
            BEGIN
              write (FF, letra1);
              write (FF, letra2);
            END;
        END
      ELSE
        write (FF, letra1);
    END;
    close (f);
    close (FF);

END;


END.
Responder Con Cita
  #4  
Antiguo 04-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Me parece que no me explique bien, cuando dije que el salto de linea, en windows, se correspondía con los caracteres #13 y #10, me refería a que el salto de linea se representa por los dos juntos, primero el #13 y luego el #10.

Es decir:
Código:
Texto+#13+#10
Así que deberías de usar algo así, ya que el #13 es el primer carácter de los dos en aparecer:
Código Delphi [-]
IF letra3 = #13 THEN

De todas formas, ir leyendo letra a letra se me hace un método poco eficiente. Porque no pruebas con algo así, donde Str es una variable de tipo String:
Código Delphi [-]
  while not Eof(F) do
  begin
    Readln(F,Str);
    if Copy(Str,Length(Str)-1,2) = 'do' then
      Writeln(FF,Copy(Str,1,Length(Str)-2) + 'DO')
    else
      Writeln(FF,Str);
  end;
Responder Con Cita
  #5  
Antiguo 04-06-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Gracias, quizás te entendí yo mal.

Voy a probar como tu me has dicho.
Responder Con Cita
  #6  
Antiguo 04-06-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Ya he hecho lo que me has dicho de #10+#13, de esta forma si encuentra un 'do' lo convierte en 'DO', que es lo que quiero, he abierto el fichero resultante con el delphi y va de lujo, pero si la unidad se abre como un txt aparece 'DO' seguido de dos cuadritos. ¿Eso puede influir en el código? ¿Hay alguna manera de que no ocurra esto? gracias.
Responder Con Cita
  #7  
Antiguo 04-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Supongo que sigues utilizando el código que pusiste antes, solo cambiaste el "if".

Pues el problema creo que esta parte del código:
Código Delphi [-]
IF letra3 = #13 THEN
BEGIN
  write (FF,'D');
  write (FF, 'O');
  write (FF, ' '); // <-- Aqui el problema
END

Cuando tienes un texto como este:
do+#13#10

Tu lo conviertes a esto:
DO+Espacio+#10

En delphi un simple #10 lo interpreta como un salto de linea, así que sigue funcionando. Pero el bloc de notas, por ejemplo, si que necesita de los dos, así que si solo encuentra un #10 en vez de cambiar de linea muestra un "cuadradito". Creo que el problema se solucionaría con algo así:
Código Delphi [-]
IF letra3 = #13 THEN
BEGIN
  write (FF,'D');
  write (FF, 'O');
  write (FF,#13); // <-- Aqui el cambio
END
Responder Con Cita
  #8  
Antiguo 04-06-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Muchiiiiiiiiiiiiiiiisimas gracias, va de perlas.

Es que utilizo mi codigo porque me parece más sencillo (aunque si menos eficiente), y como el algoritmo no es muy complicado lo hace muy rápido.

Gracias por todo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Salto de linea en ficheros carlosegs11 Varios 3 17-05-2007 16:17:17
Problemas con salto de linea cirilungol MySQL 9 16-01-2007 15:17:05
ayuda con un salto de línea que no me funciona!!! por favor!!! rojo Varios 11 29-11-2006 22:35:22
RichEdit, salto de linea chrids506 OOP 3 12-07-2006 17:42:41
salto de linea bolofe Varios 2 24-04-2005 17:30:19


La franja horaria es GMT +2. Ahora son las 20:21:29.


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