LECTURE FICHIER TEXTE SANS DÉLIMITEURS

[Résolu]
Signaler
Messages postés
4
Date d'inscription
samedi 7 juin 2008
Statut
Membre
Dernière intervention
10 juin 2008
-
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
-
Bonjour
est qu'il ya une possibilité d'extraire les données a partir d'un fichier text san délimiteurs
vers une base de données access sous delphi .
merçi d'avance.

13 réponses

Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Ton code n'est pas top mais il devrait marcher quand même :
essaie:

procedure TForm1.Button1Click(Sender: TObject);
var
  Chem, NOM, PRENOM, AGE,Ligne: string;
  F1: TextFile;
begin
  Chem := 'c:\test20\TonFichier.txt';
  AssignFile(F1, Chem);
  Reset(F1);


  repeat
    Readln(F1, Ligne);
    NOM := Copy(Ligne, 1, 10);
    PRENOM := Copy(Ligne, 11, 10);
    AGE := Copy(Ligne, 22, 2);


    ADOQuery1.Close;
    ADOQuery1.SQL.Add('Insert into table1  ');
    ADOQuery1.SQL.Add('Values(''' + (NOM) + ''',''' + (PRENOM) + ''',''' + (AGE) + ''') ');
    ADOQuery1.ExecSQL;


  until Eof(F1);


  CloseFile(F1);
end;

Et si un nom a 18 caractères ?

cantador
Messages postés
4
Date d'inscription
samedi 7 juin 2008
Statut
Membre
Dernière intervention
10 juin 2008

salut
merci cantador pour la reponse , mais faut voir quoi..
Merci de me donner des indications.
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
C'est à toi de donner la réponse !
Je ne peux pas savoir ce que tu veux faire exactement..

cantador
Messages postés
4
Date d'inscription
samedi 7 juin 2008
Statut
Membre
Dernière intervention
10 juin 2008

Salut
j'ai besoin de sauvegarder les données a partir d'un fichier text dans une base access.
le format du fichier text est du type( nom prenom age) sans délimiteur:
aaaaaa    yyyyyyy    22
ffffffffffffffkkkkkkkkk28
etc...

voici comment je m'y prend :

begin

  AssignFile(Fichier, NOM);
  Reset(Fichier);

  Repeat

    NOM :=Copy(Ligne,1,10);
    PRENOM:=Copy(Ligne,11,10);
    AGE:=Copy(Ligne,21,2);
  
      ADOQuery1.Close;    
      ADOQuery1.SQL.Add('Insert into table1  ');
      ADOQuery1.SQL.Add('Values('''+(NOM)+''','''+(PRENOM)+''','''+(AGE)+''') ');
      ADOQuery1.ExecSQL;

  Until Eof(Fichier) ;
  CloseFile(Fichier);
end;

mais ca marche pas.
Messages postés
4
Date d'inscription
samedi 7 juin 2008
Statut
Membre
Dernière intervention
10 juin 2008

salut
merçi cantador ça marcher trés bien.
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Merci de cliquer sur réponse acceptée.
cantador
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Pour ceux qui ne verraient pas la différence entre le code de djainfo et celui de cantador, c'est simple :
1- le code de Cantador est meilleur
2- djainfo a simplement oublié d'appeler la fonction ReadLn...étourderie ?

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
et avec en prime une question subsidiaire qui remet tout ne cause...

cantador
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Oui, en plus...

Je me demande si le code suivant n'est pas encore plus efficace :
type
  TEnr = record
    nom: string[10];
    prenom: string[10];
    age: string[2];
  end;

function TForm1.LoadFile(const aFilename: TFilename): integer;
var
  enr: TEnr;
  F: file of TEnr;
begin
  result := 0;
  if FileExists(AFilename) then
  begin
    AssignFile(F, AFilename);
    try
      Reset(F);
      while not eof(F) do
      begin
        Read(F, enr);
        ADOQuery1.Close;
        ADOQuery1.SQL.Add('Insert into table1  ');
        ADOQuery1.SQL.Add('Values(''' + (enr.NOM) ''',''' + (enr.PRENOM) +
          ''','''
          + (enr.AGE) + ''') ');
        ADOQuery1.ExecSQL;
      end;
      result := FileSize(F);
    finally
      CloseFile(F);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Chem: string;
begin
  Chem := 'c:\test20\TonFichier.txt';
  ShowMessageFmt('%d enregistrements ajouté(s)', [LoadFile(Chem)]);
end;

A voir...

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
type
  TEnr = record
    nom: string[30];
    prenom: string[30]
    age: string[3]
  end;

N'oublions pas les noms de famille longs et
 les centenaires (comme cantador)..

cantador
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Désolé Cantador mais je m'étais basé sur ton code qui donnait une longueur de 10 caractères au nom et au prénom et une longueur de 2 caractères à l'âge.
A djainfo d'adapter les longueurs à ses besoins, bien entendu.
Cantador, on t'adore  et félicitations pour ton âge canonique que j'ignorais

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Cantador, on t'adore...

mais moi je n'adore pas tout le monde..

Je me souviens bien d'ailleurs de t'avoir lu en train de pester après ceux qui ne répondent pas sur le forum et jurer que l'on ne t'y reprendrai plus..

cantador