Affichage fichier texte

- - Dernière réponse :  Yanb - 19 janv. 2016 à 07:52
Bonjour,

je cherche à remplir un listview avec le texte suivant ,



SHOW INFO

START

CAB VAR VAR2 VAR3
1 EDA 1F RST-6
1 EDA 1F RTA-6
1 EDA 1F BB-6


CAB VAR VAR2 VAR3
20 EBB 1F RST-23
20 EBB 1F RTA-23
20 EBB 1F CC-23

END


j'ai utilisé le code suivant pour afficher ( CAB & VAR3) dans la colone 2et 3

d'un listview




procedure TForm1.Button1Click(Sender: TObject);
var S, W: TStringList;
L: TListItem;
i, j: integer;
begin
S:=TStringList.Create;
W:=TStringList.Create;
try

S.LoadFromFile('c:\test.txt');
LV.Items.BeginUpdate;
LV.Items.Clear;
LV.AllocBy:=S.Count;
for i:=0 to S.Count-1 do
begin L:=LV.Items.Add;
W.CommaText:=S[i];
L.Caption:=W[2];
for j:=1 to W.Count-1 do
if w[3] = 'BB-6' then
L.SubItems.Add(W[3]);

if w[3] = 'CC-6' then
L.SubItems.Add(W[3]);
end;
LV.Items.EndUpdate;
finally
S.Free;
W.Free;
end;
end;
end.




COL2 COL3
CAB VAR3
1 BB-6
20 CC-23




NB: après compilation , j'ai le code d'erreur suivant:

list index out of bound (2).

il y a pas assez d'example dans le net pour le traitement de fichier texte et

listview


merci pour votre support
Afficher la suite 

15 réponses

0
Merci
Salut,
exemple :
var
  S,W: TStringList;
  I,J: Integer;
  NewColumn: TListColumn;
begin
  ListView1.ViewStyle := vsReport;
  for I := 1 to 2 do
  begin
    NewColumn := ListView1.Columns.Add;
    NewColumn.Caption := Format('Col %d',[I]);
  end;
  ListView1.Items.Add;
  ListView1.Items[ListView1.Items.Count-1].Caption := 'CAB';
  ListView1.Items[ListView1.Items.Count-1].SubItems.Add('VAR3');
  S := TStringList.Create;
  W := TStringList.Create;
  try
    S.LoadFromFile('C:\Test.txt');
    for I := 0 to S.Count - 1 do
    begin
      W.CommaText := S[I];
      for J := 0 to W.Count - 1 do
      begin
        if W.Count > 3 then
        begin
          if (W[3] = 'BB-6') or (W[3] = 'CC-23') then
          begin
            if J = 0 then
            begin
              ListView1.Items.Add;
              ListView1.Items[ListView1.Count-1].Caption := W[J];
            end;
            if J = 3 then
              ListView1.Items[ListView1.Items.Count-1].SubItems.Add(W[J]);
          end;
        end;
      end;
    end;
  finally
    S.Free;
    W.Free;
  end;
end;
@+
Commenter la réponse de Yanb
0
Merci
Salut yanb:

Merci beaucoup ça marche bien, j'ai cru que ce n'est pas faisable.

J’ai une dernière question si c'est possible ?

Est ce qu'on peut mettre deux fichiers texte dans le même listview ?

Par exemple j'ai ajouté le deuxième fichier (show info2)
cité ci-dessous à celui qui a été ajouté précédemment (show info1)




show info2

START

CAB1 CAB2 VAR3IDEX1 VAR3IDEX2
123A EFF2 BB 6

G1 G2 G3
ACT ACT NC

END



Avec la condition suivante si VAR3 (BB-6) est dans (VAR3INDEX1+VAR3INDEX2) qui est (BB & 6)

Le listview final devient comme suit:





CAB VAR3 CAB1 CAB2 G3
1 BB-6 123A EFF2 NC




NB: pour le deuxième fichier j'ai utilisé le même code que tu as posé et ça a marché très bien, sauf que G3 je n’ai pas su comment l’ajouter dans la colonne 5 du listview.
merci pour votre support et aide
Commenter la réponse de dino34
0
Merci
Salut,
pas trop le temps mais oui on peut le faire aussi avec plusieurs fichiers...un truc vite fait que j'ai testé rapidement et qui fonctionne avec tes fichiers...à toi de l'améliorer...
procedure SearchVal(ADirFil, AVal1, AVal2: string; AListView: TListView);
var
  ListS : TStringList;
  ListW : TStringList;
  I,J   : Integer;
begin
  ListS := TStringList.Create;
  ListW := TStringList.Create;
  try
    ListS.LoadFromFile(ADirFil);
    for I := 0 to ListS.Count - 1 do
    begin
      ListW.CommaText := ListS[I];
      for J := 0 to ListW.Count - 1 do
      begin
        if ListW.Count > 2 then
        begin
          if (ListW[2] = AVal1) and (ListW[3] = AVal2) then
            if (J = 0)  or (J = 1) then
              AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J]);
          if (ListW[2] = 'G3') and (J = 2) and (AListView.Items[AListView.Items.Count-1].SubItems.Count = 3) then
          begin
            ListW.CommaText := ListS[I+1];
            AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J]);
          end;
        end;
      end;
    end;
  finally
    ListS.Free;
    ListW.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  Tab : array [0..3] of string = ('VAR3','CAB1','CAB2','G3');
var
  S,W: TStringList;
  I,J: Integer;
  NewColumn: TListColumn;
begin
  ListView1.ViewStyle := vsReport;
  for I := 1 to 5 do
  begin
    NewColumn := ListView1.Columns.Add;
    NewColumn.Caption := Format('Col %d',[I]);
  end;
  ListView1.Items.Add;
  ListView1.Items[ListView1.Items.Count-1].Caption := 'CAB';
  for I := 0 to High(Tab) do
    ListView1.Items[ListView1.Items.Count-1].SubItems.Add(Tab[I]);
  S := TStringList.Create;
  W := TStringList.Create;
  try
    S.LoadFromFile('C:\Test.txt');
    for I := 0 to S.Count - 1 do
    begin
      W.CommaText := S[I];
      for J := 0 to W.Count - 1 do
      begin
        if W.Count > 3 then
        begin
          if (W[3] = 'BB-6') or (W[3] = 'CC-23') then
          begin
            if J = 0 then
            begin
              ListView1.Items.Add;
              ListView1.Items[ListView1.Items.Count-1].Caption := W[J];
            end;
            if J = 3 then
            begin
              ListView1.Items[ListView1.Items.Count-1].SubItems.Add(W[J]);
              if (W[3] = 'BB-6') then
                SearchVal('C:\Test2.txt', 'BB', '6', ListView1);
              if (W[3] = 'CC-23') then
                SearchVal('C:\Test2.txt', 'CC', '23', ListView1);
            end;
          end;
        end;
      end;
    end;
  finally
    S.Free;
    W.Free;
  end;
end;
@+
Commenter la réponse de Yanb
0
Merci
salut yanb:

oui ça marche bien , mais j'ai fait une petite erreur dans la déscription , en faite les numeros après le tirait sont variable :

mais le numeros qui se trouve dans le fichier 2 doit forcement suivre le fichier 1.






VAR3
BB-1
BB-13

CC-23
CC-30

VAR3INDEX1 VAR3INDEX3
BB 1
BB 13
CC 23
CC 30



j'ai éssayer de changer le code mais il m'affiche ce code d'erreur quand je fait appel à la procedure :

[Error] Unit1.pas(102): Incompatible types: 'String' and 'TListView'

par example le code est :


begin
if W.Count > 3 then
begin
if (Pos('BB-', W[3]) = 1 ) or (Pos('CC-', W[3]) = 1 ) then
begin
if J = 0 then
begin
ListView1.Items.Add;
ListView1.Items[ListView1.Items.Count-1].Caption := W[J];
end;
if J = 3 then
begin
ListView1.Items[ListView1.Items.Count-1].SubItems.Add(W[J]);
if Pos('BB-', W[3]) = 1 then
SearchVal('c:\test.txt', 'BB-', ListView1);
if Pos('CC-', W[3]) = 1 then
SearchVal('c:\test.txt', 'CC-', ListView1);
end;
end;
end;
end;
end;




NB: je suis vraiment désolé et merci pour votre support .
Commenter la réponse de dino34
0
Merci
bonjour yanb:


J’ai essayé de rajouter ce bout de code à la procédure, est ce que c'est faisable ?




if (ListW[4] = 'VAR3IDEX1')
and (ListW[5] = 'VAR3IDEX2')
AND (J = 3) and (J = 4)
and(AListView.Items[AListView.Items.Count-1].SubItems.Count = 3) then
begin
ListW.CommaText := ListS[I+1];
AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J]);
end;
....
....
....
......


begin
if W.Count > 3 then
begin
if (Pos('BB-', W[3]) = 1 ) or (Pos('CC-', W[3]) = 1 ) then
begin
if J = 0 then
begin
ListView1.Items.Add;
ListView1.Items[ListView1.Items.Count-1].Caption := W[J];
end;
if J = 3 then
begin
ListView1.Items[ListView1.Items.Count-1].SubItems.Add(W[J]);
if Pos('BB-', W[3]) = 1 then
SearchVal('c:\test.txt', 'BB', ListView1);
if Pos('CC-', W[3]) = 1 then
SearchVal('c:\test.txt', 'CC', ListView1);
end;
end;
end;
end;
end;






Mais le fault code ci-dessous s'affiche toujours:

[Error] Unit1.pas(110): Incompatible types: 'String' and 'TListView'


Est-ce que vous pourriez m'aider ?
Commenter la réponse de dino34
Messages postés
174
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
7 août 2019
4
0
Merci
Salut
qu'est ce qu'il y a à la ligne 110 ??
pour TListView c'est surement un TString et non un string
Commenter la réponse de papyvore
0
Merci
salut:

oui le compilateur genere le code d'erreur et pointe sur cette ligne :


SearchVal('c:\test.txt', 'BB', ListView1);



merci pour support et suggestion
Commenter la réponse de dino34
Messages postés
174
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
7 août 2019
4
0
Merci
salut
si c'est le
procedure SearchVal(ADirFil, AVal1, AVal2: string; AListView: TListView);
proposé par Yanb, regarde le nombre de var (ADirFil, AVal1, AVal2)
et toi tu l'utilise comme ça "SearchVal('c:\test.txt', 'BB', ListView1);" il manque un paramètre .
a moins que tu utilise un autre "SearchVal"
Commenter la réponse de papyvore
0
Merci
salut:

En changeant le code de yanb le fault code disparait, mais le listview se remplis seulement avec les données du premier fichier (show info).




procedure SearchVal(ADirFil, AVal1: string; AListView: TListView);
var
ListS : TStringList;
ListW : TStringList;
I,J : Integer;
begin
ListS := TStringList.Create;
ListW := TStringList.Create;
try
ListS.LoadFromFile(ADirFil);
for I := 0 to ListS.Count - 1 do
begin
ListW.CommaText := ListS[I];
for J := 0 to ListW.Count - 1 do
begin
if ListW.Count > 2 then
begin
if (ListW[2] = AVal1)or (ListW[3] = AVal1) then
if (J = 0) or (J = 1) then
AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J]);
if (ListW[2] = 'G3') and (J = 2) and (AListView.Items[AListView.Items.Count-1].SubItems.Count = 3) then
begin
ListW.CommaText := ListS[I+1];
AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J]);
end;


end;
end;
end;
finally
ListS.Free;
ListW.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
Tab : array [0..3] of string = ('VAR3','CAB1','CAB2','G3');
var
S,W: TStringList;
I,J: Integer;
NewColumn: TListColumn;
begin
ListView1.ViewStyle := vsReport;
for I := 1 to 5 do
begin
NewColumn := ListView1.Columns.Add;
NewColumn.Caption := Format('Col %d',[I]);
end;
ListView1.Items.Add;
ListView1.Items[ListView1.Items.Count-1].Caption := 'CAB';
for I := 0 to High(Tab) do
ListView1.Items[ListView1.Items.Count-1].SubItems.Add(Tab[I]);
S := TStringList.Create;
W := TStringList.Create;
try
S.LoadFromFile('c:\test.txt');
for I := 0 to S.Count - 1 do
begin
W.CommaText := S[I];
for J := 0 to W.Count - 1 do
begin
if W.Count > 3 then
begin
if (Pos('BB-', W[3]) = 1 ) or (Pos('CC-', W[3]) = 1 ) then
begin
if J = 0 then
begin
ListView1.Items.Add;
ListView1.Items[ListView1.Items.Count-1].Caption := W[J];
end;
if J = 3 then
begin
ListView1.Items[ListView1.Items.Count-1].SubItems.Add(W[J]);
if (pos(W[3] ,'BB')=1) then
SearchVal('c:\test.txt','BB', ListView1);
if (W[3] = 'CC') then
SearchVal('c:\test.txt','CC', ListView1);
end;
end;
end;
end;
end;
finally
S.Free;
W.Free;
end;
end;

end.



NB: le problème n'est pas encore résolu .
Commenter la réponse de dino34
Messages postés
174
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
7 août 2019
4
0
Merci
salut
"mais le listview se remplis seulement avec les données du premier fichier (show info). "

normal tu ne traites que "c:\test.txt" il est ou le deuxième fichier??
tout ça est assez confus (pour moi)
Commenter la réponse de papyvore
0
Merci
salut:

il n' y pas de confusion , on a fusioner deux fichier en un seul , vue que tous ce qui vient après ( BB- et CC-) est variable d'ou l'erreur que j'ai fait la premiere fois dans la deuxième description.
( en faite les numeros après le tirait sont variable ).





SHOW INFO

START

CAB VAR VAR2 VAR3
1 EDA 1F RST-6
1 EDA 1F RTA-6
1 EDA 1F BB-6


CAB VAR VAR2 VAR3
20 EBB 1F RST-23
20 EBB 1F RTA-23
20 EBB 1F CC-23

END

show info2

START

CAB1 CAB2 VAR3IDEX1 VAR3IDEX2
123A EFF2 BB 6

G1 G2 G3
ACT ACT NC

CAB1 CAB2 VAR3IDEX1 VAR3IDEX2
123A EFF2 CC 23

G1 G2 G3
ACT ACT NC




END





merci
Commenter la réponse de dino34
Messages postés
174
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
7 août 2019
4
0
Merci
Salut
essais avec

if (Pos('BB', W.Strings[3]) = 1 ) or (Pos('CC', W.Strings[3]) = 1 )
or (Pos('BB', W.Strings[2]) = 1 ) or (Pos('CC', W.Strings[2]) = 1 )

j'obtient

1 BB-6
20 CC-23
123A 6
123A 23

en espérant que c'est le résultat que tu cherche

papyvore
Commenter la réponse de papyvore
0
Merci
Salut,
Si j'ai bien compris...
Je dirai en modifiant un peu comme ça...
procedure SearchVal(ADirFil, AVal1, AVal2: string; AListView: TListView);
var
  ListS : TStringList;
  ListW : TStringList;
  I,J   : Integer;
begin
  ListS := TStringList.Create;
  ListW := TStringList.Create;
  try
    ListS.LoadFromFile(ADirFil);
    for I := 0 to ListS.Count - 1 do
    begin
      ListW.CommaText := ListS[I];
      for J := 0 to ListW.Count - 1 do
      begin
        if ListW.Count > 2 then
        begin
          if (ListW[2] = AVal1) and (ListW[3] = AVal2) then
            if (J = 0)  or (J = 1) then
              AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J]);
          if (ListW[2] = 'G3') and (J = 2) and (AListView.Items[AListView.Items.Count-1].SubItems.Count = 3) then
          begin
            ListW.CommaText := ListS[I+1];
            AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J]);
          end;
        end;
      end;
    end;
  finally
    ListS.Free;
    ListW.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Const
  Tab : array [0..3] of string = ('VAR3','CAB1','CAB2','G3');
var
  S,W: TStringList;
  I,J: Integer;
  NewColumn: TListColumn;
begin
  ListView1.ViewStyle := vsReport;
  for I := 1 to 5 do
  begin
    NewColumn := ListView1.Columns.Add;
    NewColumn.Caption := Format('Col %d',[I]);
  end;
  ListView1.Items.Add;
  ListView1.Items[ListView1.Items.Count-1].Caption := 'CAB';
  for I := 0 to High(Tab) do
    ListView1.Items[ListView1.Items.Count-1].SubItems.Add(Tab[I]);
  S := TStringList.Create;
  W := TStringList.Create;
  try
    S.LoadFromFile(ExtractFilePath(Application.ExeName)+'Test.txt');
    for I := 0 to S.Count - 1 do
    begin
      W.CommaText := S[I];
      for J := 0 to W.Count - 1 do
      begin
        if W.Count > 3 then
        begin
          if (Pos('BB-',W[3]) <> 0) or (Pos('CC-',W[3]) <> 0) then
          begin
            if J = 0 then
            begin
              ListView1.Items.Add;
              ListView1.Items[ListView1.Items.Count-1].Caption := W[J];
            end;
            if J = 3 then
            begin
              ListView1.Items[ListView1.Items.Count-1].SubItems.Add(W[J]);
              if (Pos('BB-',W[3]) <> 0) then
                SearchVal(ExtractFilePath(Application.ExeName)+'Test2.txt',Copy(W[3], 0, Pos('-',W[3])-1),Copy(W[3], Pos('-',W[3])+1, Length(W[3])), ListView1);
              if (Pos('CC-',W[3]) <> 0) then
                SearchVal(ExtractFilePath(Application.ExeName)+'Test2.txt',Copy(W[3], 0, Pos('-',W[3])-1),Copy(W[3], Pos('-',W[3])+1, Length(W[3])), ListView1);
            end;
          end;
        end;
      end;
    end;
  finally
    S.Free;
    W.Free;
  end;
end;
@+
Commenter la réponse de Yanb
Messages postés
174
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
7 août 2019
4
0
Merci
salut
non , cette procédure l'as tu essayé ??? chez moi ça marche pas
plutôt ça

procedure TForm1.Button1Click(Sender: TObject);
Const
Tab : array [0..3] of string = ('VAR3','CAB1','CAB2','G3');
var
S,W: TStringList;
I,J: Integer;
NewColumn: TListColumn;
begin
ListView1.ViewStyle := vsReport;
for I := 1 to 5 do
begin
NewColumn := ListView1.Columns.Add;
NewColumn.Caption := Format('Col %d',[I]);
end;
ListView1.Items.Add;
ListView1.Items[ListView1.Items.Count-1].Caption := 'CAB';
for I := 0 to High(Tab) do
ListView1.Items[ListView1.Items.Count-1].SubItems.Add(Tab[I]);
S := TStringList.Create;
W := TStringList.Create;
try
S.LoadFromFile(ExtractFilePath(Application.ExeName)+'Test.txt');
for I := 0 to S.Count - 1 do
begin
W.CommaText := S[I];
for J := 0 to W.Count - 1 do
begin
if W.Count > 3 then
begin
if (Pos('BB', W[3]) = 1 ) or (Pos('CC', W[3]) = 1 )
or (Pos('BB', W[2]) = 1 ) or (Pos('CC', W[2]) = 1 ) then
begin
if J = 0 then
begin
ListView1.Items.Add;
ListView1.Items[ListView1.Items.Count-1].Caption := W[J];
end;
if J = 3 then
begin
ListView1.Items[ListView1.Items.Count-1].SubItems.Add(W[J]);
end;
end;
end;
end;
end;
finally
S.Free;
W.Free;
end;
end;

la procédure SearchVal(..,
te sert a rien ,tu contrôle avec les if (pos ...
papyvore
Salut,
Non pas essayé le jour même...aujourd'hui oui :-) et elle fonctionne comme je le pensai. La procédure SearchVal sert à la lecture du deuxième fichier ou à la relecture du même fichier avec un paramétrage différent, si on regarde bien le code on a des paramètres différents par exemple première lecture avec BB- ensuite numéro dans la procédure, ensuite SearchVal recherches BB et si son numéro et identique à la première recherche on recherche alors G3 etc...
Le ListView affiche bien au final avec le dernier fichier posté...
CAB VAR3 CAB1 CAB2 G3
1 BB-6 123A EFF2 NC
20 CC-23 123A EFF2 NC
Le listView affiche avec ta procédure...
CAB VAR3 CAB1 CAB2 G3
1 BB-6
20 CC-23
123A 6
123A 23
Dans tous les cas ceci peut être améliorer, simplifier ceci n'étant qu'un point de départ etc...
procedure SearchVal(ADirFil, AVal1, AVal2: string; AListView: TListView);
var
ListS : TStringList;
ListW : TStringList;
I,J : Integer;
begin
ListS := TStringList.Create;
ListW := TStringList.Create;
try
ListS.LoadFromFile(ADirFil);
for I := 0 to ListS.Count - 1 do
begin
ListW.CommaText := ListS[I];
for J := 0 to ListW.Count - 1 do
begin
if ListW.Count > 2 then
begin
if (ListW[2] = AVal1) and (ListW[3] = AVal2) then
if (J = 0) or (J = 1) then
AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J]);
if (ListW[2] = 'G3') and (J = 2) and (AListView.Items[AListView.Items.Count-1].SubItems.Count = 3) then
begin
ListW.CommaText := ListS[I+1];
AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J]);
end;
end;
end;
end;
finally
ListS.Free;
ListW.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Const
Tab : array [0..3] of string = ('VAR3','CAB1','CAB2','G3');
var
S,W : TStringList;
I,J,K : Integer;
NewColumn : TListColumn;
ListParam : TStringList;
begin
ListView1.ViewStyle := vsReport;
for I := 1 to 5 do
begin
NewColumn := ListView1.Columns.Add;
NewColumn.Caption := Format('Col %d',[I]);
end;
ListView1.Items.Add;
ListView1.Items[ListView1.Items.Count-1].Caption := 'CAB';
for I := 0 to High(Tab) do
ListView1.Items[ListView1.Items.Count-1].SubItems.Add(Tab[I]);
S := TStringList.Create;
W := TStringList.Create;
ListParam := TStringList.Create;
try
ListPAram.Add('BB-');
ListPAram.Add('CC-');
S.LoadFromFile(ExtractFilePath(Application.ExeName)+'Test.txt');
for I := 0 to S.Count - 1 do
begin
W.CommaText := S[I];
for J := 0 to W.Count - 1 do
begin
if W.Count > 3 then
begin
for K := 0 to ListParam.Count - 1 do
begin
if Pos(ListParam[K],W[3]) <> 0 then
begin
if J = 0 then
begin
ListView1.Items.Add;
ListView1.Items[ListView1.Items.Count-1].Caption := W[J];
end;
if J = 3 then
begin
ListView1.Items[ListView1.Items.Count-1].SubItems.Add(W[J]);
if Pos(ListParam[K],W[3]) <> 0 then
SearchVal(ExtractFilePath(Application.ExeName)+'Test.txt',Copy(W[3], 0, Pos('-',W[3])-1),Copy(W[3], Pos('-',W[3])+1, Length(W[3])), ListView1);
end;
end;
end;
end;
end;
end;
finally
S.Free;
W.Free;
ListParam.Free
end;
end;

@+
Commenter la réponse de papyvore
0
Merci
Bonjour yanb et papyvore :

@ papyvore : merci beaucoup pour vos conseils et support.
Dans votre code l'affichage se fait seulement sur la 1&2 colonne du listview

@ yanb : les deux codes marches très bien :

Juste pour savoir :

Lorsque l’ordre de lignes dans fichier (SHOW INFO 2), j’ai pris la deuxième portion, la compilation se fait normalement vue que G3 qui contient rien est le dernier.



123A EFF2 BB 6

G1 G2 G3
ACT ACT NC

123A EFF2 BB 6

G1 G2 G3
ACT ACT NC

123A EFF2 BB 6

G1 G2 G3
ACT ACT



2/ le deuxième cas sous G3 il y a rien que ce soit le premier ou

au milieu dans show2, le compilateur se bloque (list index out of

bound 2 ) :



123A EFF2 BB 6

G1 G2 G3
ACT ACT

123A EFF2 BB 6

G1 G2 G3
ACT ACT

123A EFF2 BB 6

G1 G2 G3
ACT ACT NC



J’ai ajouté le code ci-dessous mais il ne fait pas le nécessaire


Var
S : string ;
begin
ListW.CommaText := ListS[I+1];
S:= ListW[2];
if pos('G3',S) <> 0 then
AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J]);



Est-ce qu’on peut faire une condition lorsque sous G3 est vide je ne prends pas carrément cette ligne, pour éviter l’erreur list index out of bound 2 ?


Merci
Salut,
oui en remplaçant une partie du code de la procédure SearchVal par exemple de cette façon
...
if (ListW[2] = 'G3') and (J = 2) and (AListView.Items[AListView.Items.Count-1].SubItems.Count = 3) then
begin
ListW.CommaText := ListS[I+1];
if ListW.Count > 2 then
AListView.Items[AListView.Items.Count-1].SubItems.Add(ListW[J])
else
AListView.Items[AListView.Items.Count-1].SubItems.Add('Pas de valeur')
end;
...
@+
Commenter la réponse de dino34