IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Récuperer les données d'un fichier txt pour les insérer dans une Table


Sujet :

Bases de données Delphi

  1. #41
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    En passant par un TFileStream ca serait largement plus simple pour traiter la progression et la récupération des données du fichier (vu que ton fichier à l'air d'avoir toujours la même structure (taille de ligne identique)

    Tu fais la structure dans ce style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Type TMaLigne = record
      Code : Array[1..3] of Char;
      Texte1 : Array[1..52] of char;
      Texte2 : Array[1..20] of char;
      CRLF : array [1..2] of char; // à ne pas enlever car dans ton fichier exemple les lignes finissent par un CRLF ^^
    end;
    puis tu récupères les données de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Var
      FFile : TFileStream;
      MaLigne : TMaligne;
      sText : String;
    begin
     
      FFile := TFileStream.Create(MonFichier,fmOpenRead);
      Try
        FFile.Seek(0,soFromBegining);
        While (FFile.Position + Length(MaLigne) < FFile.Size do
        begin
          FFile.ReadBuffer(MaLigne,Length(MaLigne));
     
         // Puis suffit de récuper les données et les mette comme tu veux
         // sText sert d'exemple
         sText := String(Maligne.Code) + ' - ' + String(Maligne.Texte1);
     
          ProgressBar1.Position := FFile.Position * 100 Div FFile.Size;
        end;
     
      finally 
        FFile.Free;
      end;
    end;
    Bien sur c'est à adapter selon le code et j'ai un doute juste sur le Length(MaLigne) faut peut être metttre Size(MaLigne) à la place
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  2. #42
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    J'adore aussi la méthode de découpage par structure comme le conseille Rayek pour l'avoir utiliser de nombreuses fois (que ce soit en fichier fixe qu'en fichier binaire structuré)

    Juste faire attention au Char, autant prévenir les risques tout de suite en utilisant AnsiChar ... ainsi cela fonctionnera aussi bien en D7 qu'en D2009

    et j'ajouterais l'utilisation du packed pour garantir que les blocs sont bien contigües

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type TMaLigne = packed record
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #43
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Ton fichier forme.txt fait 22349 octets.
    Chaque ligne fait 74 octets (3 + 49 + 20 + 2 (CR/LF))

    22349 div 74 = 302.

    Ton "RecordCount" est de 302.
    2/72 ~ 3%, j'ai raisonné en ordre de grandeur.

    @Rayek: superbe implémentation, que du bon sens !

  4. #44
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 2
    Points : 0
    Points
    0
    Par défaut
    Salut tout le monde;
    j'ai le même problème que sandokhane sauf que moi j'utilise des tables de type Paradox 7 et et que je veut extraire les données a partir d'un fichier texte qui se trouve dans un CD-ROM (lecteur CD)

    Aidez moi SVP

  5. #45
    Membre habitué Avatar de samaury
    Homme Profil pro
    Chevalier Jedi
    Inscrit en
    Mars 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Chevalier Jedi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2008
    Messages : 114
    Points : 141
    Points
    141
    Par défaut
    Salut Bingo25
    Tu as testé les solutions proposées dans cette discussion?
    Si oui ou est-ce que tu bloques exactement?
    Si non... commence par mettre en oeuvre ces solutions, surtout la dernière : Packed Record + TFileStream
    Pensons bien, pensons bio

  6. #46
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 2
    Points : 0
    Points
    0
    Par défaut
    Quelle est la fonction qui renvoie la partie décimal d'un nombre?

  7. #47
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par Bingo25 Voir le message
    Quelle est la fonction qui renvoie la partie décimal d'un nombre?
    Delphi via la touche permet d'obtenir une aide et vous auriez trouvé que la fonction Frac répond à votre demande. function Frac(X: Extended): Extended;
    Philippe.

  8. #48
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour.

    Je viens de faire un test de lecture d'un fichier de 35Mo (20.000 lignes) avec pour chaque ligne 5 traitements copy(s,...,...).

    En ouvrant le fichier avec un TextFile : 485 ms.
    En ouvrant dans un TStringList : 125 ms. (presque 4 x plus rapide).
    J'ai évidemment fait le test plusieurs fois. C'est une moyenne.

    C'est toujours ça de gagné.

    Thierry

    J'avais posté ce message avant de voir la suite de la discussion. Ouvrir comme fichier binaire me semble être une bonne solution.

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/05/2014, 23h01
  2. [XL-2007] Récuperer les données d'un fichier et traiter les données
    Par kekefff dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/05/2014, 20h29
  3. [OpenOffice][Base de données] Récupérer les données d'un fichier .txt et les insérer dans une base de données
    Par frack dans le forum OpenOffice & LibreOffice
    Réponses: 9
    Dernier message: 05/08/2009, 10h52
  4. Réponses: 2
    Dernier message: 20/07/2008, 11h29
  5. Importer fichiers txt d'un dossier dans une table
    Par avantoux dans le forum Access
    Réponses: 16
    Dernier message: 28/12/2005, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo