salut,comment je peux remplir un tableau à partir d'un fichier texte. le tableau doit contenir que des entiers.merci
salut,comment je peux remplir un tableau à partir d'un fichier texte. le tableau doit contenir que des entiers.merci
Ca va dépendre de la structure du fichier texte...
On peut voir quelques lignes de ce fichier ?
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
le fichier va contenir des valeurs numeriques et des ';' comme séparateur
exples 2004;2005;1003;6540;1200;1223;1475;10004;20004;
ça fait partie du fichier ? ou tu as voulu écrire "exemple" ?exples
Sinon, je te suggère un TStringList:
- LoadFromFile avec séparateur ";"
- à partir du Count, tu dimensionnes ton tableau d'entiers
- tu transtypes chaque item par StrToInt pour alimenter ton tableau
Regarde l'aide Delphi pour les finesses d'utilisation des TStringList.
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
merci pour votre reponse immediate, je suis pas familiariser avec la programation en delphi c'est pourquoi mes questions sont bêtes. j'ai essayé de faire ce que tu as sugérer mais ça marche pas. s'il vous plait essayer de me corriger les fautes. un grand merci
[Modération]
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 var List: TStrings; procedure TForm1.FormCreate(Sender: TObject); begin list := TStringList.Create; end; procedure TForm1.Button2Click(Sender: TObject); var i,cnt: integer; begin try list.NameValueSeparator:=';' ; list.LoadFromFile('c:\fichier.txt'); cnt:=templist.Count; //**********remplissage de tableau***************** for i :=1 to cnt do begin tabt[i]:= strtoint(templist.Strings[i]); end;
Merci d'utiliser les balises code ou quote, Laurent Dardenne
[/Modération]
hum....Envoyé par tarekcom
ça ressemble à un beau double post ça : http://www.developpez.net/forums/sho...d.php?t=137511
Je me cite moi même :
Salut!
La classe TStringlist est indexée à 0.
Essaye ce code :
Bon dev!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 for i := 0 to cnt - 1 do memo1.lines.add(templist.Strings[i]);
-Slimjoe
-Slimjoe
merci pour la reponse mais mon problème n'est pas encore résolu, j'ai donné un mauvais code. je veux affecter chaque valeur entre deux";" dans une case d'un tableau d'entiers.
corrigez ce code s'il vous plait
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 procedure TForm1.Button2Click(Sender: TObject); var i,cnt: integer; begin try templist.NameValueSeparator:=';' ; templist.LoadFromFile('c:\fichier.txt'); cnt:=templist.Count; for i :=0 to cnt-1 do begin tabt[i]:=strtoint(templist.Strings[i]); end; finally end; end;
A mon avis, tu as un problème de dimension de ton tableau.
Sinon, qu'elle est l'erreur ?
Mais pourquoi ne pas garder tes valeurs dans ta list et les utiliser directement là où tu en as besoin avec StrToInt(templist.strings[i]) ?
[Dites][le][avec][des][tags].[Arf...]
le message d'erreur mentionne que "1000;1222;113;1111; n'est pas an integer
le probleme est donc dans la conversion.
" ces valeurs sont celles existantes dans le fichier txt. je veux les enregistrer dans un tableau pour pouvoir faire des calculs différents.(une moyenne,des frequences....)
j'espere etre bien compris
C'est le séparateur qui n'est pas reconnu ou pris en compte car la string retournée contient la chaine de toutes tes valeurs... à priori tu n'as donc qu'un seul item dans ta TStringList.
Je ne suis pas au boulot (donc pas de Delphi sous la main), mais la solution (provisoire) peut être de "parser" le templist.Strings[0] pour en tirer toutes les valeurs dans une autre TStringList par exemple.
[Dites][le][avec][des][tags].[Arf...]
Merci de lire les régles du forum et les régles du club.Envoyé par tarekcom
Tutoriels Delphi Win32/Delphi .NET/Oracle/PowerShell - FAQ Delphi - FAQ Delphi .NET
Beatus, qui prodest, quibus potest.
Je sais que ce n'est pas propre propre, mais pour rapidement mettre des valeurs séparées par un caractère dans un TStringList, j'utilise souvent StringReplace :Envoyé par tarekcom
maList.Text := StringReplace(maChaine, ';', #13, [rfReplaceAll ];
Dans ton cas, ça ressemblerait à ça :
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 procedure TForm1.Button2Click(Sender: TObject); var i, j: integer; parseList: TStringList; fichierList: TStringList; begin fichierList: TStringList.Create; parseList := TStringList.Create; fichierList.LoadFromFile('c:\fichier.txt'); //Pour chaque ligne dans le fichier... for i := 0 to fichierList.Count - 1 do begin //...on remplace les ; par des retour de chariot et on met ça dans parseList... parseList.Text := StringReplace(fichierList.Strings[i], ';', #13, [rfReplaceAll]; //...on boucle dans la parseList pour retrouver nos enregistrements qui sont maintenant sur des lignes de parseList... for j := 0 to parseList.Count - 1 do begin //...et on assigne à la valeur Integer celle du StringList à la bonne position //xxxxx := StrToInt(parseList.Strings[j]); <-- Mettre dans le tableau ici :) end; end; parseList.Free; fichierList.Free; end;
Bon dev!
-Slimjoe
-Slimjoe
merci beaucoup pour les reponses. aucun message d'erreur et afficher mais mon tableau reste toujours vide.(j'ai essayer de l'afficher mais il n'ya que les zéros dans le tableau)
J'aurais besoin de plus de détails sur ton tableau stp.Envoyé par tarekcom
Il est dynamique ? Statique ?
Tu peux copier / coller ton code stp ? Et le fichier texte tant qu'à y être ?
Merci!
-Slimjoe
-Slimjoe
le contenu de fichier est le suivant:
2001;2005;4100;1144;1147;1547;15457;10;13;14
j'ai essayer votre code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //declaration de tableau tabt : array [1..10] of integer;
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 //*********************************************// procedure TForm1.Button1Click(Sender: TObject); var i,j: integer; parseList: TStringList; fichierList: TStringList; begin fichierList:= TStringList.Create; parseList := TStringList.Create; fichierList.LoadFromFile('c:\fichier.txt'); //Pour chaque ligne dans le fichier... for i := 0 to fichierList.Count - 1 do begin //...on remplace les ; par des retour de chariot et on met ça dans parseList... parseList.Text := StringReplace(fichierList.Strings[i], ';', #13, [rfReplaceAll]); //...on boucle dans la parseList pour retrouver nos enregistrements qui sont maintenant sur des lignes de parseList... for j := 1 to parseList.Count - 1 do begin //...et on assigne à la valeur Integer celle du StringList à la bonne position tabt[j] := StrToInt(parseList.Strings[j]); //<-- Mettre dans le tableau ici :) end; end; parseList.Free; fichierList.Free; end;
mon tableau doit contenir les chiffres existants dans le fichier
exemple
tabt[1] contient le chiffre 2001;
merci beaucoup
[Balises CODE rajoutées par Pedro. Merci d'y penser à l'avenir]
Code écrit "à la louche" (ça devrait marcher quand même) :
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
36
37
38
39
40
41
42
43 type TIntArray=array of integer; ... procedure Charge(NomFichier:string;var UnTableau:TIntArray); var SL1,SL2:TStringList; i,j,Taille:integer; s:string; begin SetLength(UnTableau,0); SL1:=TStringList.Create; SL2:=TStringList.Create; try SL2.Delimiter:=';'; SL1.LoadFromFile(NomFichier); if SL1.Count>0 then for i:=0 to SL1.Count-1 do begin s:=SL1.Strings[i]; SL2.DelimitedText:=s; Taille:=length(UnTableau); if SL2.Count>0 then begin SetLength(UnTableau,Taille+SL2.Count); for j:=0 to SL2.Count-1 do UnTableau[Taille+j]:=SL2.strings[j]; end; end; finally SL2.Free; SL1.Free; end; end; ... var TonTableau:TIntArray; i,Somme:integer; begin //Chargement du tableau Charger('TonFichier.txt',TonTableau); ... //utilisation Somme:=0; for i:=0 to high(TonTableau)-1 do somme:=somme+TonTableau[i]; end;
Bidouilleuse Delphi
remplace la ligne
par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part tabt[j] := StrToInt(parseList.Strings[j]); //<-- Mettre dans le tableau ici :)
Code : Sélectionner tout - Visualiser dans une fenêtre à part tabt[j] := StrToInt(parseList.Strings[j-1]); //<-- Mettre dans le tableau ici :)
Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée
merci pour vos reponses, j'ai essayé le code de mr waskol mais ça pas marcher. le tableau reste toujours vide
j'ai essayé de faire l'appel de la procedure charger dans un autre boutton.
voila la façon que j'ai suivit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure TForm1.Button1Click(Sender: TObject); var i,somme : integer; begin Charger('c:\fichier.txt',Tabt); Somme:=0; for i:=0 to high(Tabt)-1 do begin somme:= somme+ tabt[i] ; end; edit1.Text:=inttostr(somme); end;
N.B tabt et fichier.txt sont mes paramêtres.
[Balises CODE rajoutées par Pedro. Merci d'y penser à l'avenir]
Salut,
J'ai repris exactement ton code et y ajouté un bout qui affiche le contenu du tableau. Tout fonctionne parfaitement.
-Slimjoe
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 var i, j: integer; parseList: TStringList; fichierList: TStringList; tabt : array [1..10] of integer; sMessage: string; begin fichierList := TStringList.Create; parseList := TStringList.Create; fichierList.LoadFromFile('c:\fichier.txt'); //Pour chaque ligne dans le fichier... for i := 0 to fichierList.Count - 1 do begin //...on remplace les ; par des retour de chariot et on met ça dans parseList... parseList.Text := StringReplace(fichierList.Strings[i], ';', #13, [rfReplaceAll]); //...on boucle dans la parseList pour retrouver nos enregistrements qui sont maintenant sur des lignes de parseList... for j := 0 to parseList.Count - 1 do // <-- j'ai corrigé cette ligne. Attention : c'est indexé à 0 et non 1 :) begin //...et on assigne à la valeur Integer celle du StringList à la bonne position tabt[j + 1] := StrToInt(parseList.Strings[j]); end; end; parseList.Free; fichierList.Free; //Afficher tableau sMessage := ''; for i := 1 to 10 do sMessage := sMessage + IntToStr(tabt[i]) + #13; showmessage(sMessage); end;
-Slimjoe
il y a un gros problème dans le code que tu nous postes régulièrement : les TList sont indéxés à partir de 0, alors que ton tableau d'Integer est indexé à partir de 1 ; dans le code que tu viens de poster, tu fais un appel sur tabt[0] (premier passage de la boucle) et tu t'arrêtes à 9, donc il te tu n'utilise pas la dernière valeur du tableau
Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager