Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Leer un archivo de con cadenas ASCIIZ (https://www.clubdelphi.com/foros/showthread.php?t=8682)

leandro_tami 29-03-2004 23:52:08

Leer un archivo de con cadenas ASCIIZ
 
Hola!. Escribo porque estoy buscando una forma inteligente de leer un archivo con cadenas de texto ASCIIZ dentro de un TListBox, obviamente colocando cada linea en un item diferente. Probé con DelimiterText, QuoteChar, Delimiter... etc, un monton de propiedades, pero no entiendo como funcionan. Y siempre tengo la última alternativa, leer el archivo caracter por caracter, separar yo mismo las lineas e ir ingresandolas de a una. Si programase en Pascal, lo haría asi, pero quiero creer que en Delphi habrá alguna otra forma que no sea tan fea. Muchisimas gracias!!!!!!

__cadetill 29-03-2004 23:58:19

Código:

ListBox1.Items.LoadFromFile(mifichero);

roman 30-03-2004 00:48:30

Cita:

Empezado por cadetill
Código:

ListBox1.Items.LoadFromFile(mifichero);

Me parece que el problema es que las líneas del archivo que leandro_tami quiere leer no están separadas por retornos de carro sino por caracteres nulos (ASCIIZ) y me parece que en tales casos no funciona LoadFromFile.

// Saludos

Julià T. 30-03-2004 02:31:20

existe la funcion:
StringReplace()
que reemplaza caracteres, y funciona bien excepto con el caracter nulo (Char(0))

roman 30-03-2004 03:24:45

Cita:

Empezado por Julià T.
existe la funcion:
StringReplace()
que reemplaza caracteres, y funciona bien excepto con el caracter nulo (Char(0))

Así es. Yo intenté leer el archivo mediante un FileStream directamente a un string y reemplazar los #0 por #13#10 pero como observas no es posible. Aún no se me ocurre ninguna solución que no sea hacer algo a pie como el mismo leandro_tami indica.

// Saludos

leandro_tami 30-03-2004 05:33:58

Exacto, el problema está porque son cadenas separadas por #0 y no por #10+#13. Pensé que quizas, leyendo todo a una cadena, y usando Pos(#0,buffer), seguido de un copy (para extraer la linea) y un delete (para borrar del buffer la linea que ya separé) podria hacerlo facilmente, el codigo quedaría digamos... tan solo un poco mas bonito, pero estaría recorriendo la cadena tres veces tan sólo para extraer una linea! :(

Magician^ 30-03-2004 06:58:52

No se si te servirá esto:

Código:

Converts a list of null terminated strings to a string list.
 
procedure MultiSzToStrings(const Dest: TStrings; const Source: PChar);
 
Unit
JclStrings
 
Parameters
 
const Dest: TStrings
The string list to receive the individual strings.
 
const Source: PChar
The source string to extract the items from.
 
Description
 
Source is assumed to be a list of strings, separated by a NULL character,
terminated by a double NULL character. For example
'Project#0JEDI#0Rules#0#0'. The function takes this string and copies the
individual strings to the string list. Thus, after executing this function with
the above string the Dest list will contain the items 'Project', 'JEDI' and 'Rules'.

Salu2

DarkByte 30-03-2004 08:57:49

leandro_tami, me parece que "ASCIIZ" se escribe ASCII (American Simple Characters for no me acuerdo qué). Es posible que esté equivocado. Te digo esto por si alguna vez tienes que hacer una búsqueda, para que te sea más efectiva.

roman 30-03-2004 10:27:51

Cita:

Empezado por DarkByte
me parece que "ASCIIZ" se escribe ASCII (American Simple Characters for no me acuerdo qué).

ASCII es lo que tú dices: American Standard Code for Information Interchange
pero es costumbre referirse a cadenas terminadas en null como ASCIIZ.

// Saludos


La franja horaria es GMT +2. Ahora son las 23:36:07.

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