0

Lazarus1.1とFreepascal2.7.1を使用して、2つのStringGrid(StringGrid1とStringGrid2)があります。

StringGrid1には3つの列が含まれています。3番目の列には一意の値が含まれています。

StringGrid2にも3つの列があり、そのうちの3番目にも同じ一意の値が含まれていますが、それらは別のソースから取得されており、順序が異なり、一部が欠落している可能性があります。

Grid1のCol3を調べて、対応する一意の値がGrid2のどこにあるか(どの行)を調べる必要があります。したがって、StringGrid1 Col3のすべての行を解析し、「見つかった値ごとに、その値も含むStringGrid2のColumn3の対応する行を見つけて、見つかった場合はそれを返すか、見つからない場合は欠落していることをすべてになるまで通知する必要があります。 SG1Col3の行が検索されました。」

私がそれをどのように行うかについてのアイデアはありますか?うまくいけば、実際よりも複雑に見えることの1つですが、誰かが助けてくれることを願っています(私はこれを見つけましたが、私が必要としているものではないと思いますか?:Delphi Pages Entry?私もこれを見つけましたが、私がやっていることをどのように適用するかを完全には説明していません、私はwikiエントリとは思いません

4

2 に答える 2

1

私の解決策:

      VAR
        List_Found_Values,
        List_Not_Found        : TSTRINGLIST;
        i, I_Found            : INTEGER;
    BEGIN
      List_Found_Values   := TSTringList.Create;
      List_Not_Found      := TStringList.Create;

      FOR i := 0 TO StringGrid1.Count - 1 DO
      BEGIN
        I_Found := StringGrid2.Cols[2].IndexOf (StringGrid1.Cells[2, i]);
        IF I_Found > -1 THEN
          List_Found_Values.Add (StringGrid2.Cells[0, I_Found]+' + StringGrid2.Cells[1, I_Found]+' '+StringGrid2.Cells[2, I_Found])
        else
          List_Not_Founds.Add (StringGrid1.Cells[2, I_Found]);
      END;
      {use the tstringlist items List_Found and List_Not_Found etc. count to deside what to do }
    END;  

これはボックスに直接書き込まれますが、解決策のアイデアが得られるはずです。

于 2012-12-07T13:04:35.417 に答える
0

2つの方法を発見しました:

for count1 := 0 to StringGrid1.RowCount - 1 do
  for count2 := 0 to StringGrid2.RowCount - 1 do
  begin
    if StringGrid1.Cells[3, count1] = StringGrid2.Cells[3, count2] then
    begin
      ShowMessage(StringGrid1.Cells[3, count1] + ' Found In Row ' + IntToStr(count2));
      Break;
    end;
  end;

もう1つの、効率は劣りますが、それでも便利な方法は次のとおりです。

for i := 0 to SL.Count - 1 do 
begin
  ShowMessage(SG.IndexOf(SL.Strings[i])): 
  // (SG being the StringGrid and SL being a StringList)
end;

また

ShowMessage(SG.IndexOf('Text To Search For')): 
于 2012-12-03T10:40:33.727 に答える