|
크레브 님의 말씀대로
첫번째는 TStringList 의 Delimiter 를 이용한 샘플이구요
두번째는 직접 파싱루틴을 간단히 만드었습니다.
폼에는 TEdit* Edit1 과 TMemo* Memo1
그리고 TButton * Button1,Button2 가 올려져 있습니다.
Edit 에 있는 내용을 스페이스를 기준으로 짤라서
메모장에 한 라인씩 넣었습니다.
//방법1
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Clear();
Memo1->Lines->Delimiter=' ';
Memo1->Lines->DelimitedText=Edit1->Text;
}
//---------------------------------------------------------------------------
//방법2
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text;
String str="";
Memo1->Lines->Clear();
int ilen=Edit1->Text.Length();
for(int i=1;i<=ilen;i++)
{
if(Edit1->Text[i]==' ')
{
if(str.Length())
{
Memo1->Lines->Add(str);
str="";
}
continue;
}
str=str+Edit1->Text[i];
}
if(str.Length())
{
Memo1->Lines->Add(str);
}
}
//---------------------------------------------------------------------------
크레브 님이 쓰신 글 :
: string에서 스페이스로 나눠진 문자 잘라내는것은
: 해결책이 너무 많아서 문제 아닙니까?
:
: 그냥 Edit->Text.c_str()으로 문자열 포인터 얻어와서
: 직접 for루프 돌리면서 파싱 루틴 만들어도 간단하고
:
: strtok 사용해서 파싱해도되고
:
: TStringList에서 Delimiter 프로퍼티를 " " 스페이스로 설정하고
: list ->DelimitedText = Edit->Text;
: 이거 넣어준후 StringList의 각각의 Strings[] 가지고 정수로 바꿔도 됩니다.
:
:
:
:
: comsky 님이 쓰신 글 :
: : 포럼 검색도 해보고 메뉴얼도 찾아보고 했는데
: : 해결책을 찾지 못해 이렇게 질문드립니다.
: :
: : 예를 들어
: : TEdit에
: : 0 1 4 8(값 사이는 스페이스로 한칸씩 띄웁니다.)
: : 이런식으로 값을 입력받으면 각각의 값을 따로 뽑아내서
: : 사용할 수 있는 방법이 있나요?
: :
: : 제가 이 방법을 적용하려는 루틴은 아래와 같은데
: : num_proc의 수 만큼 proc란 구조체를 생성하면서
: : proc의 멤버인 arrTime, burstTime, remainTime을
: : TEdit에 위와 같은 형식으로 입력받은 값으로 초기화
: : 시켜주려고 합니다.
: :
: : for (i = 0; i < num_proc; i++) {
: : proc = new PROCESS[num_proc];
: : proc[i].processNum = i + 1; //process number 부여
: :
: : TEd_Arrival->SelStart = i;
: : TEd_Arrival->SelLength = 1;
: : TEd_Arrival->AutoSelect = true;
: : TEd_Burst->SelStart = i;
: : TEd_Burst->SelLength = 1;
: : TEd_Burst->AutoSelect = true;
: :
: : proc[i].arrTime = TEd_Arrival->SelText.ToInt();
: : proc[i].burstTime = TEd_Burst->SelText.ToInt();
: : proc[i].remainTime = TEd_Burst->SelText.ToInt();
: : }
|