データの件数を取得するには?

解決


超ド級初心者  2010-01-08 07:07:57  No: 36793

超ド級の初心者ですが教えてください。
会社の部署名が入ったcsvリストがあります。
別にいろいろなデータが入ったcsvがあります。
それぞれを読み込んで、各部署名と一致するデータの件数を出し、それをcsvで別ファイルで保存したいのですが、どのようにしたらいいのか分かりません。
どなたか教えていただけないでしょうか?よろしくお願いいたします。


manbon  2010-01-08 18:13:59  No: 36794

ここまで丸投げの質問では、なかなかレスが付かないと思います。
もうちょっと、ピンポイントの質問にされたほうがいいのでは?
「ここまでやったが、ここがわからない」とかの方が回答者も
回答しやすいと思いますよ。

例えば、以下のような感じでしょうか?

var
  sl1, sl2, sl3, sll: TStringList;
  i1, i2, iCount: integer;
begin
  sl1 := TStringList.Create;
  sl2 := TStringList.Create;
  sl3 := TStringList.Create;
  sll := TStringList.Create;
  try
    sl1.LoadFromFile('c:\部署.csv'); //データ形式=部署
    sl2.LoadFromFile('c:\データ.csv'); //データ形式=部署,データ

    for i1 := 0 to Pred(sl1.Count) do begin
      iCount := 0;
      for i2 := 0 to Pred(sl2.Count) do begin
        sll.CommaText := sl2[i2];
        if sll[0] = sl1[i1] then begin
          inc(iCount);
        end;
      end;

      sl3.Add(sl1[i1] + ',' + IntToStr(iCount));
    end;

    sl3.SaveToFile('c:\件数.csv');
  finally
    sl1.Free;
    sl2.Free;
    sl3.Free;
    sll.Free;
  end;
end;


Hota  2010-01-08 18:17:04  No: 36795

いろいろな方法があります。
どんな形式のCSVか判りませんが、
各部署名1
各部署名1
各部署名2
各部署名2
各部署名2
各部署名3
各部署名3
の様な形だと、
TStringListに読み込んで、ソートして部署ごとの件数を数えるのではどうでしょうか?
var
 StringList1,StringList2:TStringList;
 S1 : String;
 I, Count : Integer;
begin
  S1 := '';
  Count := 0;
  StringList1 := TStringList.Create; //入力用
  StringList2 := TStringList.Create; //出力用
  try
    StringList1.LoadFromFile('csvfilename');
    StringList1.Sorted := true;
    for I := 0 to StringList1.count - 1 do
    begin
      if S1 <> '' and S1 <> StringList1[I] then
      begin
         StringList2.Add(S1 + ':' + IntToStr(Count));
         Count := 1;
         S1 := StringList1[I];
      end;
      if S1 = '' or S1 <> StringList1[I] then
      begin
         Count := 1;
         S1 := StringList1[I];
      end;
      if S1 = StringList1[I] then
      begin
         Inc(Count);
      end;
    end;
  finally
    StringList2.Savetofile('別ファイル名');
    Freeandnil(StringList1);
    Freeandnil(StringList2);
  end;
end;

発言者名は、こんな形はやめましょう。


超ド級初心者  2010-01-08 22:24:19  No: 36796

mandon様,Hota様,大変申し訳ありませんでした。
delphiを全くやったことがなく,色々調べてみたのですが,コードを書くこともできませんでしたので,こういう質問にさせていただきました。
以後はもっと勉強して,丸投げすることないよう気をつけますので,今後ともよろしくお願い致します。


超ド級初心者  2010-01-08 23:19:35  No: 36797

お礼を書き忘れてしまいました。
mandon様,Hota様,思い通りのことが出来ました。
本当にありがとうございました。
大変お世話になりました。


HOta  2010-01-09 13:51:00  No: 36798

ここは、ボランティアによる質問の場です。解決がどのように出来たかを書いていただくと助かります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加