Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Lectura de un archivo separado por comas (*.CSV)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Lectura de un archivo separado por comas (*.CSV) Responder citando

Hola,
Tengo el siguiente problema. Cargo un archivo delimitado por comas en un StringList. Al tratarlo con la propiedad CommaText, todo marche bien salvo por un campo en el que puede haber espacios en blanco (es el caso del nombre y apellido).
Si en la linea tengo cargado "56549823,Carlitos Garcia,18,H,3,1,2,1,...", borland interpreta que "Carlitos" y "Garcia" corresponden a campos diferentes. Alguien sabe como solucionarlo? Hayque tener en cuenta que puede haber mas de un nombre o apellido.

Código:
    TStringList* Records = new TStringList;
    TStringList* Fields = new TStringList;
    Records->LoadFromFile(filename);
    AnsiString consulta;
    for (int i = 1; i < Records->Count; ++i)
        {
        Fields->CommaText = Records->Strings[i];
        for (int x = 0; j < nFields; ++x)
            {
            consulta += "'" + Fields->Strings[x] +"'";
            }
            if (x < nFields-1 )
               consulta += ",";
            else
               consulta += ")";
        }


Otra cosa que no le encontre es el de cambiar el delimitador de campos. El fichero original me viene con ";" y no con ",". Para avanzar con las pruebas los reemplacé. Antes habia intentado Fields->Delimiter = ';' pero no lo cambia (la propiedad Delimiter sigue con ",").

saludos y gracias por adelantado
diego


SetDelimiter
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola:

Cuando hay espacios o incluso el propio delimitador necesita usarse dentro del texto en algún momento hay que usar las comillas. Por ejemplo la entrada anterior para que lo tome correctamente debería estar así:
     56549823,"Carlitos Garcia",18,H,3,1,2,1...

^-usar-comillas-^
   
Esta es la forma en que trabaja el invento, si no puedes cambiar el formato en que te lo entrega el otro programa esta claro que vas a tener que hacerte una función propia que descomponga la cadena a tu gusto.

O una solución "barata" seria cambiar todos los espacios por algún carácter en especial por ejemplo "_" y al final cuando haya partido todas las líneas volver a convertir ese carácter en espacio... no se si me explico.

Cita:
Antes habia intentado Fields->Delimiter = ';' pero

"Delimiter" no tiene efecto cuando usas "->CommaText" ahí es siempre la coma, solo tiene efecto cuando usas "->DelimitedText" en su lugar (el uso es idéntico). Aun con esto los espacios siguen comportándose igual.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola Leo, disculpa la demora, recien volvi este fin de semana de mis vacaciones.
Creo que me quedo con la solución "barata". Es mas, ya la habia usado en mis pruebas, solo que no se me habia ocurrido sacarle el "_" que le habia agregado.
Gracias nuevamente!
diego
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.