FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Leer fichero de texto con problemas
Hola.
Tengo un fichero de texto bastante grande (con cientos de megas) y quiero ejecutarle un procesado para eliminar una serie de caractares por debajo del ascii 32 que se han colado. El problema es que si utilizo el código siguiente: Código:
var f:textfile; ... AssignFile(F, 'c:\mifich.txt'); Reset(F); while not eof(f) do begin Readln(F, S); procesar(s); end; CloseFile(F); Si abro el fichero con el editor del delphi, por ejemplo, se lee completamente todo el fichero sin problemas, pero si lo abro con el wordpad, entonces sólo llega hasta donde está ese caracter. Lo que quiero es procesarlo entero para eliminar esos caracteres por debajo del ascii 32, pero sin eliminar los saltos de línea para que siga como estaba. ¿alguna recomendación? |
#2
|
|||
|
|||
Hola...
Ya probaste cargarlo en un StringList?
Saludos... |
#3
|
|||
|
|||
Hola. Si, ya lo intenté. A parte de que se queda pillado pues tiene que meter en memoria los 400 megas del fichero de texto, también se corta.
Lo ideal sería poder procesar línea a línea el fichero e ir grabándolo en otro, pero claro, sin que pare hasta que no se alcance el tamaño completo real. Un saludo. |
#4
|
||||
|
||||
te recomiendo que pongas un Application.ProcessMessage dentro del While, incrementes una variable ejemplo <Linea> y la pongas en un Label para que vayas viendo por cual linea va procesando y mires donde se detiene y puedas ver si hay algun problema.
|
#5
|
||||
|
||||
Otra cosa.
Recuerda que ReadLn lee una linea hasta que se encuentra un fin de linea. Si este es muy grande pueda que no te quepa dentro de los limites de un String. Por eso te sugiero que lo hagas con buffer. Hay varios ejemplo de leer un fichero con buffer. Y vas procesando cada caracter. Este puede ser un ejemplo Espero te sirva, si tiene error, perdona, pero es que lo he hecho con un ejemplo de una copia de ficheros, pero puede servirte cualquier cosa dispara que estamos aqui. saludos Editado: Recuerda en la condicion decirle que si el caracter es #13 o #10 que no lo reemplazca, ya que son los caracteres de salto de linea. Hat un progressbar que puedes quitar, Es para que veas por donde va la edicion del fichero Última edición por paladincubano fecha: 29-05-2008 a las 18:54:26. |
#6
|
|||
|
|||
Hola. Gracias por las respuestas pero ya intenté también eso. El problema es la instrucción Filesize me devuelve el tamaño incorrecto del fichero, sólo hasta donde se encuentra ese caracter de fin de fichero.
Respecto a procesarlo y ver donde se corta. Esa es la cuestión. A mano si lo hago, claro, abro el fichero en Delphi (que me lo abre entero) y proceso con el programa que he hecho hasta la línea en la que existe un caracter de ese tipo. Vuelo al delphi, me voy a esa línea y borro ese caracter (bueno en delphi aparece como un cuadradito). Grabo el fichero y le vuelvo a dar al programa. Así sucesivamente. Lo que quiero es que esto sea automático pues son un montón de veces las que aparece el "EOF" por el fichero y no quiero hacerlo manualmente. A ver si preparo un fichero de ejemplo con varias líneas y caracteres de corte y lo pongo aquí para que lo veais. Gracias por la ayuda. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
leer fichero de texto | emeritos | Lazarus, FreePascal, Kylix, etc. | 5 | 20-02-2008 19:57:46 |
Leer varios archivos de texto y extraer solo 2 lineas de ese texto | mp3968 | Internet | 1 | 17-05-2007 20:24:09 |
Saber cantidad de lineas que se van a leer de un fichero texto... | Lester | Varios | 4 | 04-04-2007 17:57:02 |
Leer fichero texto palabra por palabra... | Lester | Varios | 2 | 03-04-2007 15:28:27 |
leer fichero de texto | davidgaldo | Varios | 1 | 08-11-2005 15:05:12 |
|