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

Delphi Discussion :

Conversion de longs fichiers texte en CSV


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut Conversion de longs fichiers texte en CSV
    Bonsoir,

    une exportation d'un logiciel me donne une dizaine de fichiers au format .txt.
    ces derniers sont énormes (certains ont 1 million de lignes) et ne peuvent pas être complètement ouverts par EXCEL
    la partie qui est digérée par celui-ci me permet de voir qu'en délimitant par tabulation uniquement
    j'arrive à constituer un fichier correct pouvant ensuite être converti au format csv.
    je souhaiterais pouvoir faire cette conversion en une seule fois avec Delphi7
    ou en utilisant un composant.

    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 941
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 941
    Par défaut
    Je n'ai pas bien compris ta question. Tu veux représenter un certains nombre de lignes en colonnes afin de limiter le nombre de lignes ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Comme Andnotor je n'ai pas bien compris
    Citation Envoyé par cantador Voir le message
    la partie qui est digérée par celui-ci me permet de voir qu'en délimitant par tabulation uniquement
    j'arrive à constituer un fichier correct pouvant ensuite être converti au format csv.
    Par là tu veux dire : remplacer les tabs par des virgules ?
    Attention à ne pas oublier les données avec espaces à mettre entre " "

    En tout cas avec 1000000 de lignes je ne sais pas si TStringList aura la capacité , je ne pense pas .
    a mon avis il faut traiter le fichier en plusieurs parties un peu comme ça :
    tant que pas fin de fichier de départ
    lire 1000 lignes dans un TStringList
    convertir dans le TStringList (voir la propriété commatext)
    sauver les lignes dans fichier résultat
    Une FAQ pour la piste
    une petite video (Neo-Zelandaise donc english) pour le commatext
    devrait mettre le pied à l'étrier

  4. #4
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut conversion de longs fichiers texte au format csv
    Bonjour,

    je reprends contact d'ici peu...

    @+

  5. #5
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut
    merci pour votre attention

    je précise qu'il s'agit vraisemblablement d'une exportation de tables, car les entêtes de colonne (donc les champs..)
    figurent dans le fichier.. il y en a beaucoup, tous de taille différente et comportant des caractères accentués.
    j'ai bien sûr cherché de mon côté..
    j'ai trouvé un petit composant qui parse les fichiers texte, mais il faut renommer les champs et leurs tailles
    ce qui ne m'arrange pas du tout, car rien n'est à la même longueur et ne veux pas changer le nom des champs.

    les données elles sont toutes soient numériques, soit en texte majuscule.

    mais il faudrait dans un premier temps, comme vous l'indiquez pouvoir mettre des " " pour les données contenant des espaces..
    comment fait EXCEL pour traiter directement les tabulations sans s'occuper des blancs dans les données ?

    Par là tu veux dire : remplacer les tabs par des virgules ?
    Oui, c'est exactement ce que je voudrais faire, mais avec des points virgules.
    remplacer #9 par #3B


    et je voudrais aussi éviter les TextFile..

    merci

  6. #6
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut longs fichiers texte
    c'est toujours au moment où l'on pose la question que souvent on trouve une partie de la réponse...
    je viens en effet de trouver un composant : Le TJvCsvDataSet qui fait tout le boulot !
    enfin presque, il reste à introduire ensuite le ";".

    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
    26
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      SL: TStringList;
    begin
      SL := TStringList.Create;
     
      try
        JvCsvDataSet1.Close;
        JvCsvDataSet1.Separator := #9;
        JvCsvDataSet1.Open;
        JvCsvDataSet1.First;
     
        while not JvCsvDataSet1.Eof do
        begin
          SL.Add(JvCsvDataSet1.FieldByName('MonChamp1').Text + ';'); // + champ2 + '; '+ champ3 + ';' + champ4 etc..
          JvCsvDataSet1.Next;
        end;
     
        SL.SaveToFile('testR.csv');
     
      finally
        SL.Free;
        showmessage('terminé !');
      end;
    end;
    On devrait même pouvoir concaténer le tout en faisant appel des champs dans le composant par leur index..

    Si vous une meilleure solution ou même sans utiliser ce composant, je suis preneur.

    merci par avance pour votre aide précieuse

  7. #7
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut suite..
    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      SL: TStringList;
      i: integer;
      conca: string;
    begin
      SL := TStringList.Create;
      try
        JvCsvDataSet1.Separator := #9;
        JvCsvDataSet1.Open;
        while not JvCsvDataSet1.Eof do
        begin
          conca := '';   
          for i := 0 to JvCsvDataSet1.FieldCount - 1 do
            conca := conca + JvCsvDataSet1.Fields[i].Text + ';';
          SL.Add(conca);
          JvCsvDataSet1.Next;
        end;
        SL.SaveToFile('testR.csv');
      finally
        SL.Free;
        showmessage('terminé !');
      end;
    end;
    un petit os cependant, je perds les entêtes des colonnes
    j'attends vos commentaires..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Manipulation de longs fichiers texte
    Par DSJ63 dans le forum Excel
    Réponses: 10
    Dernier message: 22/04/2009, 11h01
  2. Réponses: 0
    Dernier message: 30/03/2009, 12h47
  3. XML à fichier text ou csv : mise à plat
    Par fgachet dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 18/02/2009, 11h23
  4. Conversion automatique de fichiers texte en fichiers xml
    Par kana83 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 07/10/2008, 09h52
  5. Conversion d'un fichier texte unix -> dos
    Par lejert dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 15/11/2005, 15h59

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