Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Autres IDE
Autres IDE Les autres environnements de développement (PP Compiler, ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/10/2011, 16h00   #1
dissolvant
Invité de passage
 
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 0
Points : 0
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 :
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.
dissolvant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2011, 04h21   #2
mick605
Membre Expert
 
Homme
Étudiant
Inscription : juin 2009
Messages : 936
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France, Aveyron (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2009
Messages : 936
Points : 1 808
Points : 1 808
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 :
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 :
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 !
mick605 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2011, 12h05   #3
dissolvant
Invité de passage
 
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 0
Points : 0
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,
dissolvant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2011, 17h33   #4
mick605
Membre Expert
 
Homme
Étudiant
Inscription : juin 2009
Messages : 936
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France, Aveyron (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2009
Messages : 936
Points : 1 808
Points : 1 808
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 ?
mick605 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 09h52   #5
dissolvant
Invité de passage
 
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 0
Points : 0
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 :
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 :
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
dissolvant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 17h58   #6
mick605
Membre Expert
 
Homme
Étudiant
Inscription : juin 2009
Messages : 936
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France, Aveyron (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2009
Messages : 936
Points : 1 808
Points : 1 808
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 :
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;
mick605 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 10h24   #7
dissolvant
Invité de passage
 
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 0
Points : 0
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 :
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 :
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
dissolvant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 10h30   #8
dissolvant
Invité de passage
 
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 0
Points : 0
J'ai trouvé pourquoi je narrivé pas a rècupérer les donné en float, la variable de destination été définit en Integer.
dissolvant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 21h01   #9
mick605
Membre Expert
 
Homme
Étudiant
Inscription : juin 2009
Messages : 936
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France, Aveyron (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2009
Messages : 936
Points : 1 808
Points : 1 808
Ok, super !

Si ton problème est résolu, clique sur !
mick605 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 09h54   #10
dissolvant
Invité de passage
 
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 0
Points : 0
Meric, je ne trouve pas le nouton résolue
dissolvant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 17h44   #11
M.Dlb
Rédacteur/Modérateur
 
Avatar de M.Dlb
 
Inscription : avril 2002
Messages : 2 274
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2002
Messages : 2 274
Points : 3 381
Points : 3 381
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
M.Dlb est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h11.


 
 
 
 
Partenaires

Hébergement Web