超ド級の初心者ですが教えてください。
会社の部署名が入ったcsvリストがあります。
別にいろいろなデータが入ったcsvがあります。
それぞれを読み込んで、各部署名と一致するデータの件数を出し、それをcsvで別ファイルで保存したいのですが、どのようにしたらいいのか分かりません。
どなたか教えていただけないでしょうか?よろしくお願いいたします。
ここまで丸投げの質問では、なかなかレスが付かないと思います。
もうちょっと、ピンポイントの質問にされたほうがいいのでは?
「ここまでやったが、ここがわからない」とかの方が回答者も
回答しやすいと思いますよ。
例えば、以下のような感じでしょうか?
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;
いろいろな方法があります。
どんな形式の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;
発言者名は、こんな形はやめましょう。
mandon様,Hota様,大変申し訳ありませんでした。
delphiを全くやったことがなく,色々調べてみたのですが,コードを書くこともできませんでしたので,こういう質問にさせていただきました。
以後はもっと勉強して,丸投げすることないよう気をつけますので,今後ともよろしくお願い致します。
お礼を書き忘れてしまいました。
mandon様,Hota様,思い通りのことが出来ました。
本当にありがとうございました。
大変お世話になりました。
ここは、ボランティアによる質問の場です。解決がどのように出来たかを書いていただくと助かります。
ツイート | ![]() |