begin process at 2010 09 03 22:03:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Texte

 > EXTRACTION DES DONNÉES DES FICHIERS AVEC SÉPARATEUR

EXTRACTION DES DONNÉES DES FICHIERS AVEC SÉPARATEUR


 Information sur la source

Note :
8 / 10 - par 3 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Texte Niveau :Débutant Date de création :23/11/2004 Date de mise à jour :18/01/2005 12:01:01 Vu / téléchargé :11 067 / 1 587

Auteur : jmp77

Ecrire un message privé
Commentaire sur cette source (28)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Hello,
Alors ce programme permet de récupérer les données contenu dans un fichier du type csv par exemple. Vous pouvez sélectionner le type de séparateur (voir apercu) :
-tabulation
-virgule
-point vigule
-espace
-séparateur de votre choix

Si vous avez des remarques n'hésitez pas.

Bonne prog,
JMP77.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

17 janvier 2005 18:32:11 :
Suite à la demande de Furax13 : Ajout de la possibilité de ne pas afficher les lignes vides ainsi que les lignes commencant par #. En cliquant sur le 3eme icone en partant de la gauche avant de charger le fichier et bien les lignes vides ou commencant par # ne seront pas chargées.
17 janvier 2005 18:36:31 :
Oups j'avais homis de changer la version de l'exe.
18 janvier 2005 12:01:04 :
Un petit bug c'était glissé dans la récupération des donées. J'ai modifié toutes la fonction qui dorénavant devrait bien fonctionner. Merci à Furax13 d'avoir trouver ce bug.
18 janvier 2005 13:05:31 :
Un petit oubli de débugage de ma part ce n'est pas Y := High(CsvExtract1.TabResult[1]); mais Y := High(CsvExtract1.TabResult[0]); Encore merci à Furax13.

 Sources du même auteur

Source avec Zip Source avec une capture TABLEAU ASCII
Source avec Zip Source avec une capture DATABASE CONVERTOR XLS <--> DB
Source avec Zip Source avec une capture CALCUL AX²+BX+C

 Sources de la même categorie

Source avec Zip COMBINAISONS DE STRINGS par askil2000
Source avec Zip Source avec une capture RECONNAISSANCE DE CARACTÈRES (OCR) par Bacterius
Source avec Zip Source avec une capture NETTOYAGE AUTOMATIQUE DE NOMS DE FICHIERS par John Dogget
DISTANCE DE JARO-WINKLER par PoulpHunter
Source avec Zip BASE DE DONNÉE WIKI par thithony

Commentaires et avis

Commentaire de jmp77 le 23/11/2004 17:17:53

Au fait j'ai oublié de vous dire que les fichiers contenu dans le répertoire bin sont des fichiers permettant de tester le programme. Le dernier fichier permet de tester tous les séparateurs avec comme autres séparateurs "X".

Bonne prog,
JMP77.

Commentaire de Napster le 23/11/2004 18:30:37

salut , ces vraiment interessant votre sources , ben avant tt je vais le convertir en C++ , j'esper que sa te derenge pas , j'aurais besoin de sa en C++ , ta quelque idée .........  

Commentaire de jmp77 le 24/11/2004 08:42:02

Si tu veux l'adapter en c++ pas de souci pour moi.

Après si tu veux un coup de main pour la passer en c++ désolé mais je ne connais absolument pas le c++ donc je ne te serais pa d'une grande aide.

Si tu cherches de l'aide j'essairrai de t'aider mais je pense que j'ai essayer de bien commenter le code et que tu devrais t'y retrouver.

Enfin n'hesite pas si tu as besoin.

Bonne prog,
JMP77.

Commentaire de grandvizir le 24/11/2004 19:32:21

Avant d'adapter, il faudrait déjà que le code soit parfait... ce qui n'est pas encore le cas.

Robert;Janine
Marcel;Roland
"""The spy""";Geneviève
"Martin ; Ludivine";CSV pas bon... ;)

C'est un bon CSV ça ? Excel ne s'y trompera pas.

De plus, la boîte à propos pourrait être bannie. A part alourdir le Zip, ça ne sert à rien du tout.

Sinon, j'apprécie le redimensionnement de ton TStringGrid. Ca n'a rien à voir, mais je voulais le préciser.

Commentaire de jmp77 le 24/11/2004 19:42:55

Deja, Bonjour,

Pourrais tu expliquer pkoi cette liste ne fonctionne pas?

Robert;Janine
Marcel;Roland
"""The spy""";Geneviève
"Martin ; Ludivine";CSV pas bon... ;)

Ma boite a propos je l'ai mis simplement pour l'envoi de mail car j'avais tellement eu du mal que je me suis dit que ca pourrais depanner des gens.

++,
JMP.

Commentaire de jmp77 le 24/11/2004 19:42:57

Deja, Bonjour,

Pourrais tu expliquer pkoi cette liste ne fonctionne pas?

Robert;Janine
Marcel;Roland
"""The spy""";Geneviève
"Martin ; Ludivine";CSV pas bon... ;)

Ma boite a propos je l'ai mis simplement pour l'envoi de mail car j'avais tellement eu du mal que je me suis dit que ca pourrais depanner des gens.

++,
JMP.

Commentaire de grandvizir le 24/11/2004 20:33:28

C'est tout simple. Ton code ne gère pas les ";" et les guillemets dans une cellule. Je veux dire par là que tu prends ces caractères pour ce qu'ils ne sont pas. Si tu ouvres ce CSV avec Excel (via Fichier Ouvrir) tu verras ce que ça donne. La comparaison saute aux yeux.

Commentaire de oluha le 08/12/2004 15:12:59

Le redimentionnement de ton tstringgrid  m'a beaucoup aidé pour l'adaptation à mon tdbgrid.

Commentaire de jmp77 le 08/12/2004 18:07:57

Heureux que ca ai pu aider quelqu'un, c'est justement le but.

Bonne prog,
JMP77.

Commentaire de furax13 le 17/01/2005 14:42:03

bonjour,
je viens de récupèrer ton progamme. Il est super et il m'aide bcp pour le prg que je suis en train de faire.

J'essaye de l'adapter pour le besoin suivant :
Mon fichier csv est constitué :
  - soit de lignes commencant par #  => la ligne est un commentaire
  - lignes blanches
  - lignes avec séparateur ;

Ex :

#NoRecuit;NoProgramme;TextRecuit;TypeDeBase;GazAtmosphereProtectrice;TextureDeRecuit;
8429;0111;TextRecuit;GB-HNX;HNx;315;

#NbBobines;
3;
#Liste ordonnée des bobines dans la charge
#NoBobine;MasseEnKg;DiametreInterieurEnMm;DiametreInterieurEnMm;LargeurEnMm;EpaisseurEnMm;
4483902000;14590;630;1361;1556;0.768;
4483901000;14890;630;1390;1556;0.768;
4504550000;12520;630;1724;790;0.813;

#Nb Points des courbes mesurées;
7;
#Liste ordonnées des points de régulation;
#HeureRecuit;ConsigneCanneRegul;DebitGazComb;DebitAirComb;TCanne;TCanneBasse;TCanneDiffuseur;TCanneHaute
0.0;40;45;220.0;1542.8;48;30;120;1443;28;
0.1;80;85;220.0;1542.8;72;70;120;1443;52;
0.2;120;125;220.0;1542.8;97;110;120;1443;77;
0.3;152;157;220.0;1542.8;116;142;120;1443;96;
0.4;176;181;220.0;1542.8;130;166;120;1443;110;
0.5;200;205;220.0;1542.8;145;190;120;1443;125;
0.6;216;221;220.0;1542.8;155;206;120;1443;135;

Je n'aimerai afficher dans la stringList toutes les lignes autre que vide ou commecant par #

Comment faire cette opération le plus simplement?

Merci d'avance


Ps : dans le code de Unit1.pas, j'ai rajouté le code suivant  

Function Compte(Const SubStr:String;Const s:String):Integer;
Var i:Integer;
begin
  Result:=0;
  i:=0;
  Repeat
    i:=PosEx(SubStr,s,i+1);
    If i<>0 Then
      Inc(Result);
  Until i=0;
End;

dans ExtractCsvData :

        {On srute les lignes du fichier}
        for I := 0 to CsvExtract.Y do
          begin
            {On charge le 1er flux de données}
            Temp := List[I];
            {On recherche les ; et on insere les différents item dans la tableau}
            P0 := RecupPosSepar(BoolTab, BoolPtComma, BoolComma, BoolSpace, BoolOther,
              SeparOther, Temp);
  
//Ajout
          longLigne := Length(Temp);
            nbSeparateurDansLigne := Compte(SeparPtComma, Temp);
            if (longLigne <> 0) and (nbSeparateurDansLigne > 0) then
              begin
                premierCaractereLigne := Temp[1];
                {On lit le premier caractère de la ligne lue : si c'est #, on passe à la ligne suivante}
                if (premierCaractereLigne <> '#') then
                  begin

//Fin ajout
                 {Initialiation}
                    J := 0;

                    while P0 > 0 do
    

Commentaire de jmp77 le 17/01/2005 14:48:20

Hello,

Deja je suis heureux que cette source puisse te servir. (Ps pense à mettre une petite note si ce n'est pas deja fait).

Ensuite pour resumé ce que tu souhaites faire c'est récupérer toutes les lignes sauf celle qui commence par # ou qui sont vides ?

++,
JMP77.

Commentaire de furax13 le 17/01/2005 15:23:55

Salut,
c'est tout à fait cela.

J'aimerais le faire au niveau de la StringList plutot que la stringGrid.

Merci d'avance

A+

Commentaire de jmp77 le 17/01/2005 15:45:38

Ok je regarde ca par contre la je ne pourrais regarder quand fin de journée. DOnc soit ce soir soit demain matin je te posterai ma reponse. Désole mais je suis sur des grosses modifs de bases de données et il faut que je garde la tete froide sinon aie aie.

A bientot,
JMP.

Commentaire de jmp77 le 17/01/2005 17:19:22

Me revoici

Voici la petite procedure que tu peux inserer dans la procedure ExtractCsvData(en dessous ou au dessus de la fonction RecupPosSepar) :

procedure CleanList(var ListTemp : TStringList);

   var
   I : Integer;

   begin
   {On scanne tous les items et ceux dans lequel on trouve # ou bien rien et bien on les supprime}
   I := 0;

      While I < ListTemp.Count do
      begin

         If (Length(ListTemp.Strings[I]) = 0) then //Dabord on verifie que le champ soit remplit sinon erreur
         ListTemp.Delete(I)                        //erreur quand on fait juste un test sur le premier chr
         else
         begin

            If (ListTemp.Strings[I][1] = '#') then
            ListTemp.Delete(I)
            else
            Inc(I);
         end;
      end;
   end;

Ensuite dans ExtractCsvData tu rajoutes en dessous de List.LoadFromFile(FileName); :
CleanList(List);

Est ce que cela te convient comme cela?

Commentaire de furax13 le 17/01/2005 18:04:19

A priori, oui.
Je le teste demain matin.

De mon côté, j'avais trouvé une solution au niveau du TStringGrid.
Mais, ta solution me permet de ne travailler qu'au niveau de la TStringList ce qui me semble plus facile pour la suite.

Merci


Commentaire de jmp77 le 17/01/2005 18:09:10

Oui mais de toute facon avec ma soluce ca fonctionne sur les deux.
Puisque que l'on modifie le TStringList avant d'en recuperer les infos.
Je vais poster une mise à jour dans quelques minutes avec une option speciale pour toi.

++,
JMP77.

Tiens moi au courant.

Commentaire de furax13 le 18/01/2005 09:42:12

Salut,
j'ai récupéré ton code et cela répond parfaitement à mon besoin.
Cependant, il y a un bug. On perd des informations dans la structure CsvExtract1.


Avec le fichier csv suivant, la valeur 315 n'est pas affichée. On perd également les infos relatives aux épaisseurs.

Fichier
#NoRecuit;NoProgramme;TextRecuit;TypeDeBase;GazAtmosphereProtectrice;TextureDeRecuit;
8429;0111;TextRecuit;GB-HNX;HNx;315;
#NbBobines;
3;

#Liste ordonnée des bobines dans la charge
#NoBobine;MasseEnKg;DiametreInterieurEnMm;DiametreInterieurEnMm;LargeurEnMm;EpaisseurEnMm;
4483902000;14590;630;1361;1556;0.768;
4483901000;14890;630;1390;1556;0.768;
4504550000;12520;630;1724;790;0.813;

#Nb Points des courbes mesurées;
15;
#Liste ordonnées des points de régulation;
#HeureRecuit;ConsigneCanneRegul;DebitGazComb;DebitAirComb;TCanne;TCanneBasse;TCanneDiffuseur;TCanneHaute
0.0;40;45;220.0;1542.8;48;30;120;1443;28;
0.1;80;85;220.0;1542.8;72;70;120;1443;52;
0.2;120;125;220.0;1542.8;97;110;120;1443;77;
0.3;152;157;220.0;1542.8;116;142;120;1443;96;
0.4;176;181;220.0;1542.8;130;166;120;1443;110;
0.5;200;205;220.0;1542.8;145;190;120;1443;125;
0.6;216;221;220.0;1542.8;155;206;120;1443;135;
0.7;233;238;220.0;1542.8;166;223;120;1443;146;
0.8;246;251;211.1;1447.5;175;236;111;1347;155;
0.9;256;261;193.4;1256.8;182;246;93;1157;162;
1.0;266;271;175.7;1066.2;189;256;76;966;169;
1.1;269;274;184.4;1163.6;193;259;84;1064;173;
1.2;273;278;193.2;1261.0;197;263;93;1161;177;
1.3;277;282;193.8;1267.9;202;267;94;1168;182;
1.4;283;288;186.2;1184.3;207;273;86;1084;187;

Commentaire de furax13 le 18/01/2005 11:50:35

Pour résoudre mon pb, j'ai modifié la ligne suivante dans la méthode ExtractCsvData

                {On définit la taille du tableau}
                SetLength(CsvExtract.TabResult, CsvExtract.X + 2, CsvExtract.Y + 2);

Est-ce une correction juste?

Merci

Commentaire de jmp77 le 18/01/2005 12:04:32

Hello,

J'ai carrément tout refait au propre car ma fonction était un petit peu faite à l'arrache.

Test avec cette nouvelle version et dis moi si ca fonctionne mieux maintenant Furax?

++,
JMP77.

Commentaire de furax13 le 18/01/2005 12:47:43

Salut,
cela ne marche pas avec le fichier suivant :

#Nb de fichiers
4;
#Liste Ordonnee des fichiers à traiter;
nomGener;
11111111;
monRecuit;
110104123;

Cela plante au niveau de l'affectation de Y dans ButOpenClick
Y := High(CsvExtract1.TabResult[1]);

A+

Commentaire de jmp77 le 18/01/2005 13:09:32

Effectivement Furax13 ce n'est pas  Y := High(CsvExtract1.TabResult[1]); mais  Y := High(CsvExtract1.TabResult[0]);

Un petit oubli de débugage de ma part.

Alors maintenant tout devrait fonctionner ?

++,
JMP77.

Commentaire de furax13 le 18/01/2005 13:34:25

Tout est OK.

Merci

Commentaire de jmp77 le 18/01/2005 13:36:46

Impeccable heureux d'avoir pu t'aider.

Bonne prog et à bientot,
JMP77.

Commentaire de ada_azoul le 13/07/2005 09:31:45


Salut   JMP77

  -j'ai téléchargé ton programme
nommé "DatabaseConvertorDelphiFr" ou sous le n# 28226
qui fait le transfert d'une base pdx vers Excel et l'inverse
je trouve que ton programme est génial

j'aimerai te demander si tu n'a pas déja un autre prog
qui fait la mm chose avec les bases  IB(interbase) ou FRB(firebird)

oubien si tu pourras reprendre mon programe mini proj delphi ib
et de lui administré une unité qui fait ce boulot.

ou bien ton propre programme ; j'en ai besoin de ce genre de routine.

en bref j'ai un besoin urgent d'une unité que je peux coller
à mon programme et qui reprend une table (IB) la transfert vers une feuille Excel
la retouche puis la reprendre  dans sa table initiale avec un Update.
si tu as le temps et si ça te dérange pas bien sûre

Merci

Ada b  

Commentaire de jmp77 le 13/07/2005 09:40:48

Salut Ada_azoul,

Je te remercie pour ton commentaire.
Effectivement j'avais prévu de faire évoluer cette source sur plusieurs types de format de base de données mais le problème est le temps principalement.
Pour ce qui est des bases interbase le probleme est que je n'ai jamais pris le temps de les utiliser encore donc je ne suis pas au top encore.
Si tu le souhaites il y a cette source qui vient d'être déposée sur le site : http://www.delphifr.com/code.aspx?ID=32653 elle permet de convertir des bases paradox vers interbase.
En revanche je suis prêt à essayer d'inclure les bases interbases dans mon source mais je ne garanti pas les délais.
Pour m'aider aurais tu un exemple d'appli avec interbase des docs et des explications sur le fonctionnement cela me ferrait gagner pas mal de temps.

Contact moi par mail si tu le souhaites.

A bientôt,
JMP77.

Commentaire de ada_azoul le 14/07/2005 00:11:10

Voici une adr

www.delphifr.com/code.aspx?ID=31195

c'est le mien tu pourrais eventuellement lui greffer une unité
oubien travail à partir du dbgrid
je vais essayer te t'envoyer les doc(s) IB
merci et à bientot
Ada b

Commentaire de 99999 le 18/04/2006 18:53:07

Bonjour ,

Merci pour le source du programme "extract csv" .
Etant debutant je cherchais justement a faire un petit programme qui gere des fichiers avec separateurs 'tabulations' et ce petit programme les editent parfaitement.

Par contre je suis a la recherche du petit bout de code qui permettrais de sauvegarder les modifications faitent dans les cellules du stringgrid dans le fichier qui a ete ouvert par le programme "extract csv".
Je cherche sur le net depuis pas mal de temps mais malheureusement je n'arrive pas a trouver ...

si quelqu'un pouvait m'aider ce serait gentil.

merci d'avance.

Commentaire de 99999 le 18/04/2006 18:53:11

Bonjour ,

Merci pour le source du programme "extract csv" .
Etant debutant je cherchais justement a faire un petit programme qui gere des fichiers avec separateurs 'tabulations' et ce petit programme les editent parfaitement.

Par contre je suis a la recherche du petit bout de code qui permettrais de sauvegarder les modifications faitent dans les cellules du stringgrid dans le fichier qui a ete ouvert par le programme "extract csv".
Je cherche sur le net depuis pas mal de temps mais malheureusement je n'arrive pas a trouver ...

si quelqu'un pouvait m'aider ce serait gentil.

merci d'avance.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales