![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Hola que tal buenos días soy nueva en esto de Builder C++.... mi pregunta es la siguiente, tengo un archivo CVS el cual deseo pasar a una base de datos que ya tengo.
He utilizado lo siguiente: 1.- En un TMemo, paso el contenido de mi archivo separado por comas, y enseguida cada una de las lineas del Memo lo manejo como una cadena por separado donde utilizo un TStringList con el siguiente código Código Delphi [-] if (Memo->Lines->Count <=0) ShowMessage ("Primero debe seleccionar un archivo"); else { TStringList *SL = new TStringList; AnsiString cadena; int i,contador=Memo->Lines->Count; for (i=1; i<=contador; i++) { cadena=Memo->Lines->Strings[i]; SL->CommaText = cadena; DM->Proveed->Insert(); int cantidad = SL->Count; // La cantidad de componentes for (int fila=0; fila < cantidad; fila++) { Memo1->Lines->Add(SL->Strings[fila]); if (fila==0) DBEdit1->Text=SL->Strings[fila]; if (fila==2) DBEdit2->Text=SL->Strings[fila]; if (fila==8) DBEdit8->Text=SL->Strings[fila]; } DM->Proveed->Post(); } ShowMessage("ARCHIVO EXPORTADO....."); } Como se puede notar yo intente controlarlo con un If, y que cuando sea la segunda linea (nombre) me lo ponga en mi dbEdit pero el problema que tengo es que aquí no me separa por comas, si no por palabras, y si yo tengo el archivo con la siguiente estructura CLAVE,NOMBRE,DIRECCION,TELEFONO 0001,GERARDO PEREZ GALINDO, GALEANA 211, 3949588 0020,AGUSTIN LOPEZ MENDOZA, MINA 344, 3948588 La separación sería: 001 GERARDO PEREZ GALINDO GALEANA 211 3949588 y no puedo identificar cuántas líneas corresponden al nombre y cuantas a dirección, etc etc.... Espero alguien me pueda decir una mejor forma de realizar esto... muchas gracias |
|
#2
|
||||
|
||||
|
Código:
if (Memo->Lines->Count <=0)
ShowMessage ("Primero debe seleccionar un archivo");
else
{
TStringList *SL = new TStringList;
AnsiString cadena;
int i,contador=Memo->Lines->Count;
for (i=1; i<contador; i++)
{
cadena=Memo->Lines->Strings[i];
SL->CommaText = cadena;
DM->Proveed->Insert();
int cantidad = SL->Count; // La cantidad de componentes
for (int fila=0; fila < cantidad; fila++)
Memo1->Lines->Add(SL->Strings[fila]);
DBEdit1->Text=SL->Strings[0];
DBEdit2->Text=SL->Strings[2];
DBEdit8->Text=SL->Strings[8];
}
DM->Proveed->Post();
}
ShowMessage("ARCHIVO EXPORTADO.....");
}
__________________
self.free; Última edición por dec fecha: 30-05-2007 a las 08:46:54. |
|
#3
|
||||
|
||||
|
Me parece GLGB que vas a tener que elaborar más. El problema es que la propiedad CommaText, como ya observaste, divide no sólo por comas sino también por espacios.
Lo ideal sería que los campos en el archivo CSV estuviesen delimitados, por ejemplo: Código:
"0001","GERARDO PEREZ GALINDO", "GALEANA 211", "3949588" "0020","AGUSTIN LOPEZ MENDOZA", "MINA 344", "3948588" 1. buscas la primera coma y apuntas su posición 2. copias la parte de la cadena desde el principio hasta esa posición 3. borras dela cadena la parte recién copiada 4. repites los pasos anteriores mientras la cadena no esté vacía. Esta es la idea. No pongo un código más explícito porque desconozco las funciones en C que hacen eso, pero creo que puedes partir de ahí. // Saludos |
|
#4
|
|||
|
|||
|
Hola.... pues si creo que si voy a tener que crear un algoritmo que vaya recorriendo uno a uno los caracteres....
Intente hacer lo siguiente:
Pero no me funciona, todo me lo pone en el DBEdit1, no se bien como hacer la separación de cadenas, alguien que me pueda echar la mano??? |
|
#5
|
|||
|
|||
|
AAhh ahi en los ifs le tengo de la siguiente manera:
if (flag==1) ....... if (flag==2) ....... if (flag==3) ....... osea q si le tengo doble == solo q en el anterior post se me paso ponerlo ![]() |
|
#6
|
||||
|
||||
|
Algo que se me ocurre, un poco jalado de los pelos, pero que te permitiría usar la idea original, sería completar el CSV con los delimitadores conforme procesas cada línea
Código:
cadena = Memo->Lines->Strings;
Así, conviertes 0020,AGUSTIN LOPEZ MENDOZA, MINA 344, 3948588 en "0020","AGUSTIN LOPEZ MENDOZA"," MINA 344"," 3948588" con lo que puedes aplicar lo de CommaText sin problemas. // Saludos |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Filosofia/Manejo archivo "cds" Archivo.cds!! | Martín González | Conexión con bases de datos | 1 | 03-05-2007 00:14:23 |
| Manejo de una DLL | guiweb | Varios | 4 | 30-06-2006 15:10:48 |
| Manejo de Archivo, Consulta?? | marceloalegre | Varios | 2 | 07-11-2005 15:29:40 |
| manejo de BD | raco | Varios | 0 | 21-07-2005 00:25:33 |
| manejo de .dbf en delphi | jeni | Conexión con bases de datos | 2 | 14-09-2003 02:09:42 |
|