답변감사합니다.
그런데 행과 행을 다 비교하는 것이 아니라 행과 행의 어느 특정값만을 비교하려고 하거든요.
즉
a1.txt -> 123,567,999
a2.txt -> 444,567,888
이면 두번째 567 값만을 비교하려고 합니다.
ss = a1->String[0];
s1 = ss.AnsiPos(",");
로 찾아서 처리하려고 합니다. 그런데 시간이 엄청 걸려서...
행과 행은
StringList를 소트한후 find함수로 찾으면 금방 끝나는데...
장성호 님이 쓰신 글 :
: 데이타 량이 많으니
: 시간이 많이 걸릴듯 하네요
:
: 아래 소스에서 a2 리스트를 TStringList 가 아닌
THashedStringList 로 사용하지구요
: for문 돌려서 찾지 말고 IndexOf로 찾아보세요
:
:
: for(int c = 0; c < a1->Count; c++)
: {
: if(a2->IndexOf(a1->Strings[c])<0)
: {
: a3->Add(a1->Strings[c]);
: }
: }
:
:
: 비교하는 문자열의 길이에 따라 차이가 많이 나긴 하는데요
: 약 10배정도에서 많게는 수백배 빨라집니다.
:
: THashedStringList 는 #include <IniFiles.hpp> 에 정의되어있습니다.
:
: 그럼..
:
: 하안인 님이 쓰신 글 :
: :
: : 1.txt 와 2.txt 파일두개에서 3.txt 파일을 생성하려고 합니다.
: : 1.txt의 열의값이 2.txt 의 열의 값이 존재하는 것은 빼고 없는 열만 3.txt 파일로 만들려고 합니다.
: :
: : StrList 을 이용해서 비교해서 파일은 만드는 작업을 했는데요.
: :
: : 데이타가 1.txt 에 10만개정도 2.txt 에 1~20만개의 데이타를 넣고
: : 실행을 하니 언제 끝날지 모르겠네요.
: : 속도가 너무느려서요.
: :
: : TStringList *a1, *a2, *a3;
: : a1 = new TStringList;
: : a2 = new TStringList;
: : a3 = new TStringList;
: : a1->Clear();
: : a2->Clear();
: : a3->Clear();
: :
: : a1->LoadFromFile("a1.txt");
: : a2->LoadFromFile("a2.txt");
: :
: :
: : for(b = 0; b < a1->Count; b++)
: : {
: : ino = 0;
: : s = a1->Strings[b];
: : for(c = 0; c < a2->Count; c++)
: : {
: : s1 = a2->Strings[c];
: : if(s == s1)
: : ino = 1;
: : }
: : if(ino == 0)
: : a3->Add(s);
: : }
: : a3->SaveToFile("a3.txt");
: :
: :