PDA

Ver la Versión Completa : Leer ficheros Mac en Delphi


thagson
23-08-2006, 12:25:39
Hola amigos,


Tengo un problema, necesito leer ficheros txt en formato mac desde una aplicación windows, mi sorpesa es que delphi solo permite los fines de linea de linux/unix y windows (#10 y #13#10 respectivamente), por lo que he averiguado mac utiliza el #13 y ya esta.
Al tener los ficheros en formato mac, me lee todo el fichero como una sola linea, y no es correcto porque tiene varias lineas.


Haber si alguien me puede ayudar.


Un saludo

thagson
23-08-2006, 12:41:19
Solo bastava con escribir en el foro como para que de casualidad me saliese la respuesta.
Pero por si alguien lo necesita dejo aqui el codigo.


procedure MyReadLn(var AFile: TextFile; var S: string);
var
tmpStr: string;
MyChar: Char;
begin
tmpStr := '';
while not EOF(AFile) do
begin
read(AFile, MyChar);
case Ord(MyChar) of
13:
begin
read(AFile, MyChar);
Break;
end;
10:
Break;

else
tmpStr := tmpStr + MyChar;
end;
end;
S := tmpStr;
end;

Ñuño Martínez
23-08-2006, 13:14:27
Gracias por la información: seguro que nos es útil a más de uno.

thagson
23-08-2006, 13:20:40
No se merecen Ñuño.

Pero ahora tengo otro problemilla, el fichero ya lo leo linea por linea, lo que ocurre es que como proviene de un mac la codificación también es mac, con lo que los acentos y eñes no se muestran bien.


¿Alguien me puede ayudar? Gracias.

dec
23-08-2006, 13:27:05
Hola,

¿Codificación Mac? Nunca oí hablar de algo así, que no quiere decir que no exista, claro está. A ver si el archivo va a estar codificado en "UTF-8", por ejemplo, y el componente con el que tratas de visualizarlo no está preparado para este tipo de codificación...

Aunque, si dices que lo lees... lo mismo ni siquiera lo visualizas en ningún componente ni falta que te hace. En ese caso primero averiguaría en qué codificación está el archivo (hay programas para eso, creo, pero, puedes probar con el mismo Bloc de Notas, que reconoce varias codificaciones de caracteres).

Luego, dependiendo de la codificación del archivo... hablamos... o habláis y yo escucho... si os parece bien. :D

thagson
23-08-2006, 13:50:20
Haber, creo que he mezclado conceptos, y por ello pido disculpas.

El fichero proviene de un mac, de la codifiación no se cual es, se habre tanto en ANSI, Unicode o UTF-8.

He probado de abrirlo con el Word, me reconoce que no tiene una codificación "windows" así que me da la posibilidad de cambiarla, si la pongo en "Occidental (Mac)" el fichero se lee perfectamente con acentos y caracteres no anglosajones.

He probado de usar el oemtoansi, ansitooem, utf8tounicode, unicodetoutf8, utf8toansi y el ansitoutf8 en un acto desesperado, pero ninguno me devuelve bien los caracteres no anglosajones.

El texto lo estoy mostrando con un ShowMessage simple.
Un ejemplo podria ser que sale una ç por en vez de á.

Un saludo

dec
23-08-2006, 14:12:08
Hola,


(...) El fichero proviene de un mac, de la codifiación no se cual es, se habre tanto en ANSI, Unicode o UTF-8. (...)


Pero cuando lo abres en el Bloc de notas de Windows, por ejemplo, este tendrá que indicarte en la codificación en la que lo ha abierto (que será la que él haya podido reconocer en el fichero), por tanto no puede ser ANSI, Unicode o UTF-8 (aunque sé por dónde vas, creo), sino que tiene que ser alguna de esas u otra...

Sería acertar a la lotería, pero, si para leer el archivo vas guardando su contenido en variables de tipo String, prueba a hacerlo con el tipo WideString, que creo que es el propio en Delphi para tratar con codificaciones de caracteres distinas de ANSI.

Hay escrito por ahí en Internet algunos artículos que tratan sobre cómo bregar con la codificación de caracteres <> ANSI en Delphi. ;)