|
ExtractStrings함수는 pascal코드를 보니까 CRLF와 Space 등을 구분하도록 되어있네요
그걸 구분하지 않느 VCL함수가 있는지는 잘 모르겠구요
간단히 CRLF 및 Space를 구분하지 않는 함수를 만들어 봤습니다.
int __fastcall ExtractStringsEx(char Separators, char * Content, TStrings* Strings)
{
char *Head, *Tail;
String Item;
if( (Content == NULL) || (*Content==0) || (Strings == NULL))
{
return 0;
}
try
{
Strings->BeginUpdate();
int ilen=strlen(Content);
Head = Content;
Tail = Content;
for(int i=0;i<ilen;i++)
{
if(*Tail==Separators)
{
if( (Head !=Tail) && (*Head!=0) )
{
Item.SetLength(Tail - Head);
memmove(Item.c_str(),Head,Tail - Head);
Strings->Add(Item);
}
Head=Tail+1;
}
Tail++;
}
if( (Head !=Tail) && (*Head!=0) )
{
Item.SetLength(Tail - Head);
memmove(Item.c_str(),Head,Tail - Head);
Strings->Add(Item);
}
}
__finally
{
Strings->EndUpdate();
}
return Strings->Count;
}
//--------------------------------------------------------------------------
AnsiString a = "user1|안녕하세요\r\n반갑습니다|12345";
TStringList *StrList = new TStringList();
ExtractStringsEx('|', a.c_str(), StrList); //==> 이렇게 쓰시면 됩니다.
그럼.....
초보 님이 쓰신 글 :
: AnsiString a = "user1|안녕하세요\r\n반갑습니다|12345";
: TStringList *StrList = new TStringList();
: ExtractStrings(TSysCharSet() << '|' , TSysCharSet(), a.c_str(), StrList);
:
: 결과가
:
: StrList->Strings[0] => user1
: StrList->Strings[1] => 안녕하세요
: StrList->Strings[2] => 반갑습니다
: StrList->Strings[3] => 12345
:
: 이렇게 나오는데요
:
: 제가 원하는 결과는
:
: StrList->Strings[0] => user1
: StrList->Strings[1] => 안녕하세요\r\n반갑습니다
: StrList->Strings[2] => 12345
:
: 입니다.
:
: 어떻게 하면 될까요?
:
: 혹시나 해서 ExtractStrings(TSysCharSet() << '|' >> '\r\n', TSysCharSet(), a.c_str(), StrList);
:
: 뭐 이렇게도 해봤는데 안 되더라구요 ㅠㅠ
|