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

Autres IDE Pascal Discussion :

Mettre un fichier CSV dans un tableau [Visual I/O]


Sujet :

Autres IDE Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Mettre un fichier CSV dans un tableau
    Bonjour à tous. Je suis ici en tant que nouveau et malgré ma recherche sur le forum des sujets je n'arrive pas résoudre mon problème.

    Je souhaite lire un fichier CSV et stocker les informations dans un tableau, comme si j'étais sur excel. (ex :Tab [Ligne][Colone])
    Je précise je ne suis que débutant en informatique.

    J'utilise un compilateur basique ( VIsual IO)

    Voici le format du CSV;
    Code texte : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ;Nb de combustible;35;;;;;;
    ;Nom;% C;% H;% N;%O;% C cendres;% Cendres;PCI
    1;AUTRE;0;0;0;0;0;0;0
    2;BOIS 2;9;4;6;3;8;9;6
    3;BOIS 3;10;7;6;4;9;14;7
    4;BOIS 4;11;10;6;5;10;19;8
    5;BOIS 5;12;13;6;6;11;24;9
    6;BOIS 6;13;16;6;7;12;26;10
    7;BOIS 7;14;19;6;8;13;28;11
    8;BOIS 8;15;22;6;9;14;30;12
    9;BOIS 9;16;25;6;10;15;32;13
    10;BOIS 10;17;28;6;11;16;34;14

    Comment dois je m'y prendre ? Surtout au niveau de la séparation des informations, J'arrive à lire la ligne entière mais je bute sur comment séparer les informations.

    Merci par avance.

  2. #2
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Une technique que j'utilise souvent pour separer les données quand elles se présentent sous cette forme :

    Pour chaque ligne, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var Data : TStringList;
    ...
     
    Data.Delimiter=';';
    Data.Text:=UneLigne;
    Si UneLigne contient 1;AUTRE;0;0;0;0;0;0;0, ton Data contiendra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1
    AUTRE
    0
    0
    0
    0
    0
    0
    0
    Tu n'as plus qu'a convertir chaque item de Data vers ce que tu veux.

    Bonne chance !

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    je te remercies de cette réponse.
    Après plusieurs essais il semblerais que mon logiciel de programmation n'ai pas le Type TSringList défini. Je ne peux pas utilisé cet élément. Je suis bien embêter,

  4. #4
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Alors tu es bon pour séparer les données a la main ... Utilise les fonction PosEx, et Copy pour obtenir un résultat similaire a ce que je t'ai donné.

    Quel compilateur utilise tu ?

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour, je reviens vers vous.
    Donc reprendre depuis le début, voici le code que j'avais déveloper en utilisant une lecture sur un fichier excel
    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
    27
    28
    29
    30
    31
     
    IF NOT(Fileexists('.CSV')) then 
         begin
         Message('Base de données non disponible');
         //CLoseappli;
         end
         else
         begin
         BIT_COMBUSTILBE_AUTRE:=FALSE;
         StartExcel(FALSE);
         OPENFILEEXCEL('liste.CSV');
         NB_COMBUSTIBLE:=STRTOINT(READCELL(3,1));
         COMPTEUR:=0;
         REPEAT
               TAB_COMBUSTIBLE[COMPTEUR].Nom:=ReadCell(2,compteur+3);
               TAB_COMBUSTIBLE[COMPTEUR].C:=STRTOFLOAT(ReadCell(3,compteur+3));
               TAB_COMBUSTIBLE[COMPTEUR].H:=STRTOFLOAT(ReadCell(4,compteur+3));
               TAB_COMBUSTIBLE[COMPTEUR].N:=STRTOFLOAT(ReadCell(5,compteur+3));
               TAB_COMBUSTIBLE[COMPTEUR].O:=STRTOFLOAT(ReadCell(6,compteur+3));
               TAB_COMBUSTIBLE[COMPTEUR].CCENDRES:=STRTOFLOAT(ReadCell(7,compteur+3));
               TAB_COMBUSTIBLE[COMPTEUR].CENDRES:=STRTOFLOAT(ReadCell(8,compteur+3));
               TAB_COMBUSTIBLE[COMPTEUR].PCI:=STRTOFLOAT(ReadCell(9,compteur+3));
               compteur:=compteur+1; 
         Until compteur=NB_COMBUSTIBLE;
         QUITEXCEL;
         COMPTEUR:=0;  
         REPEAT 
                Addstring(TAB_COMBUSTIBLE[COMPTEUR].NOM);
                compteur:= compteur +1;
         Until compteur=NB_COMBUSTIBLE;    
         end

    Etant donnée que le programme tournera sur une machine qui n'a pas excel je shouaite utilsir un fichier CSV.
    'arrive à lire ligne par ligne dans une variable, mon problème réside dans la fragmation des données. Dernier essai jarrive a bien séparer les données seulement si il s'agit d'entier, les reels posent encore un problèmes.
    je vosus présente mon chantier
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    var
     FIC :INTEGER;  
     DATA:String;
     Cpt,i,cel,lenth_ligne:integer;
     STR_TEMP: STRING;
     STR_DATA: array[0..250] of string;
    Begin
         If Start_visu then
         Begin
         if Fileexists('liste.CSV') then
         Begin
          Filetextopen(FIC,'liste.CSV');
          Readln(FIC,DATA);      
          lenth_ligne:=250;       
          i:=1;cel:=0;cpt:=1;
          Repeat 
                 if (DATA[i]<>';')then
                 begin
                      STR_TEMP[cpt]:=DATA[i];
                      cpt:=cpt+1;                   
                 end
                 else
                 begin
                      cpt:=1;
                      cel:=cel+1;
                 end;   
                 i:=i+1;           
                 STR_DATA[cel]:=STR_TEMP;
          until i=lenth_ligne;
          EDC:=STRTOINT(STR_DATA[3]);
          Filetextclose(FIC); 
         END;
         End;
    End;
    J'utilise comme compilateur un logiciel SCADA VISUAL I/O www.arsoft-int.com/vio.php

    Quels pistes explorer? Merci par avance

  6. #6
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    J'avoue ne pas comprendre la finalité : Tu as un fichier Excel a la base, qui est traduit en fichier CSV. OK
    Ensuite, tu souhaite simplement afficher ce fichier dans une application ? Si c'est le cas, tu n'as qu'a utiliser un composant de type StringGrid, et tu n'auras même pas besoin de convertir tes données en entier ou float.

    Est tu obligé d'utiliser ce compilateur ?

    Je vois quelques corrections a apporter dans ton code :
    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
    27
    var
     FIC, i, cel : integer;
     STR_TEMP, DATA : string;
     STR_DATA : array[0..250] of string;
    Begin
      If Start_visu and Fileexists('liste.CSV') then
      Begin
        Filetextopen(FIC,'liste.CSV');
        Readln(FIC,DATA);      
        cel:=0;
     
        For i:=1 to Length(DATA) do  //a remplacer par 250 si nécessaire
        Begin
          If (DATA[i]<>';')then
            STR_TEMP:=STR_TEMP+DATA[i];
          Else
          Begin
            cel:=cel+1;
            STR_DATA[cel]:=STR_TEMP;
            STR_TEMP:='';
          End;            
        End;
     
        EDC:=StrToInt(STR_DATA[3]);
        Filetextclose(FIC); 
      End;
    End;

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Je te remercies,
    C'est déja plus léger à écrire et un peu moins brouillon.

    Je reprend pour la finalité.
    j'ai un fichier .CSV de forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ;Nb de combustible;35;;;;;;
    ;Nom;% C;% H;% N;%O;% C cendres;% Cendres;PCI
    1;AUTRE;0.3;1.2;2.4;3;4;5;6
    2;BOIS 2;9;4;6;3;8;9;6
    3;BOIS 3;10;7;6;4;9;14;7
    4;BOIS 4;11;10;6;5;10;19;8
    5;BOIS 5;12;13;6;6;11;24;9
    6;BOIS 6;13;16;6;7;12;26;10
    7;BOIS 7;14;19;6;8;13;28;11
    8;BOIS 8;15;22;6;9;14;30;12
    9;BOIS 9;16;25;6;10;15;32;13
    10;BOIS 10;17;28;6;11;16;34;14
    je veux pouvoir initialiser un tableau de type combustible(voir la forme du type plus bas) à partir de ce fichier .CSV pour en exploiter les valeurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TYPE
    Combustible = RECORD
                NOM     :STRING;
                C       :REAL;
                H       :REAL;
                N       :REAL;
                O       :REAL;
                CCENDRES:REAL;
                CENDRES :REAL;
                PCI     :REAL;              
    END;
    pour exemple pour le premier combustible :=
    TAB_COMBUSTIBLE[0].NOM:= AUTRE
    TAB_COMBUSTIBLE[0].C:= 0.3
    TAB_COMBUSTIBLE[0].H:= 1.2
    TAB_COMBUSTIBLE[0].N:= 2.4
    TAB_COMBUSTIBLE[0].O:= 3
    TAB_COMBUSTIBLE[0].CCENDRES:= 4
    TAB_COMBUSTIBLE[0].CENDRES:= 5
    TAB_COMBUSTIBLE[0].PCI:= 6


    J ne peux pas utilise un autre compilateur car le reste du programme fonctionne et à déja été écrit.
    Je me heurte toujours à un problème, récupérer les valeur même si il s'agit de nombres réel.
    merci en éspérant être clair

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    J'ai trouvé pourquoi je narrivé pas a rècupérer les donné en float, la variable de destination été définit en Integer.

  9. #9
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Ok, super !

    Si ton problème est résolu, clique sur !

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Meric, je ne trouve pas le nouton résolue

  11. #11
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    En bas de la page, il suffit de cliquer dessus. Je l'ai fait pour toi ce coup-ci
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

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

Discussions similaires

  1. Ranger fichier csv dans un tableau
    Par bast292 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/03/2010, 11h53
  2. stocker des valeurs entiéres dns un fichier csv dans un tableau
    Par industrielle dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/03/2009, 18h40
  3. Réponses: 6
    Dernier message: 05/02/2009, 09h34
  4. [CSV] Mettre un fichier CSV dans un tableau
    Par tahiboy dans le forum Langage
    Réponses: 5
    Dernier message: 17/06/2007, 11h36
  5. Mettre un fichier csv dans un tableau à deux dimensions
    Par neeux dans le forum Général Python
    Réponses: 5
    Dernier message: 05/03/2007, 16h36

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