문자열의 일부만 짤라서 비교한다구요?
음..
짤라내기 횟수를 줄이는 방향으로 하면
기존 방식으로 하면
a1 리스트에 있는것은 a1.Count 횟수만큼 문자열 짤라내기를 할것이구
a2 리스트에 있는것은 a1.Count x a2.Count 횟수 만큼 짤라내기를 하게 될것 같네요
전체 짤라내기 횟수 = a1.Count + a1.Count x a2.Count
-----------------------------------------------------------------------
a2 리스트에 있는것오 파일loading후에 짤라내기를 모두 해서 ..리스트에 담아두고 비교하면
짤라내기 횟수를 a2.Count*(a1.Count -1) 회 만큼 줄일수 있을것입니다.
전체 짤라내기 횟수 = a1.Count + a2.Count
그리고
짤라낸 내용도 HashedStringList에 담아두면 search속도도 빨라지고 효과가 있지 않을까 하는 생각이 듭니다.
그럼..
하안인 님이 쓰신 글 :
: 답변감사합니다.
: 그런데 행과 행을 다 비교하는 것이 아니라 행과 행의 어느 특정값만을 비교하려고 하거든요.
:
: 즉
:
: 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");
: : :
: : :