Ver Mensaje Individual
  #2  
Antiguo 03-04-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Reputación: 24
ixMike Va por buen camino
Hola.

Primeramente, si el archivo de texto no tiene formato (es decir, del que se puede abrir con el bloc de notas) pues entonces mejor ábrelo con un TMemo, o incluso si no se va a mostrar al usuario, en un objeto TStrings creado por ti mismo.

En cuanto a cortar las cadenas, tan sólo tendrías que ir recorriendo línea por línea en un bucle, coger las distintas partículas de texto mediante la función Copy (ya que has dicho que tienen longitud fija, y almacenarlo en una base de datos. Quedaría algo así:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
const
  AnchoCodigo = 5;
  AnchoApellido = 25;
  //...
  //Aquí declara todas las constantes con el ancho que tenga cada campo
  //...
var
  S: TStrings; //Donde se almacenará el texto
  Codigo, Apellido1, Apellido2, Nombre, Ciudad, CodPostal: String;
  N: Integer;
begin
  //Edit1 almacena el nombre del archivo a leer
  S:=TStringList.Create;
  S.LoadFromFile(Edit1.Text);
  for n:=0 to S.Count-1 do
    begin
    Codigo:=Copy(S[n], 0, AnchoCodigo);
    Apellido1:=Copy(S[n], AnchoCodigo+1, AnchoApellido);
    Apellido2:=Copy(S[n], AnchoCodigo+AnchoApellido+2, AnchoApellido);
    Nombre:=Copy(S[n], AnchoCodigo+AnchoApellido+AnchoApellido+3, AnchoNombre);
    //... y así con todos los campos

    //y ahora se añaden los datos
    Tabla.Insert;
    TablaCodigo.Value:=Limpiar(Codigo);
    TablaApellido1.Value:=Limpiar(Apellido1);
    TablaApellido2.Value:=Limpiar(Apellido2);
    TablaNombre.Value:=Limpiar(Nombre);
    //... y con el resto igual

    Tabla.Post;
    end;
  S.Free;
end;

La función Limpiar tendrás que declararla a parte. La he puesto porque al coger los campos con la función Copy con un ancho fijo, pues entonces al final de todos los campos tendrás espacios. Por ejemplo, si el ancho del campo nombre es 10 y tienes "Miguel", pues el dato que se guardará será "Miguel ", con cuatro espacios. La función Limpiar debería dejarlo en "Miguel". Pero eso ya te lo dejo a ti


Salu2.
Responder Con Cita