Q&A

  • String을 자~알 자르고 싶어여.
1|2|3|4|5|1|2|3|4|5|...

이런식으로 나열된 스트링이 있습니다.

근데 이것을

1|2|3|4|5

1|2|3|4|5

이런식으로 잘라내고 싶습니다.

무슨 방법이 없을까여?

Pos를 써봤는데 글자 하나하나 짤려서ㅣ ^^;;;

답변 부탁드립니다 ^^;;;;





3  COMMENTS
  • Profile
    흐미... 2001.09.13 01:03
    초보자.. wrote:

    > 1|2|3|4|5|1|2|3|4|5|...

    > 이런식으로 나열된 스트링이 있습니다.

    > 근데 이것을

    > 1|2|3|4|5

    > 1|2|3|4|5

    > 이런식으로 잘라내고 싶습니다.

    > 무슨 방법이 없을까여?

    > Pos를 써봤는데 글자 하나하나 짤려서ㅣ ^^;;;

    > 답변 부탁드립니다 ^^;;;;

    >





    무식하게 한번 만들어봤습니다.



    procedure TForm1.Button1Click(Sender: TObject);

    var vs_Temp, vs_Result: String;

    vi_Loop,i, vi_Mid, vi_End, vi_Cnt, vi_Cnt5, vi_Temp : Integer;

    begin

    vs_Temp := '1|28806003000292|1000|1000|739|1|8806011010067|1000|500|739|00|0001|002|003|1|2|3|4|5|1|2|3|4|5|100|200|200|300|400|500|100|';

    Edit1.Text := vs_Temp;

    vi_Loop := 0;

    vi_Mid := 1;

    vi_Cnt := 0;

    vi_Cnt5 := 0;

    vi_Temp := 0;

    Memo1.Lines.Clear;



    //먼저 해당스트링의 '|'을 포함갯수를 구합니다.

    for i:=1 to length(vs_Temp) do

    begin

    if copy(vs_Temp,i,1) = '|' then

    vi_Cnt := vi_Cnt+1;

    end;



    //예상되는 라인수를 구하고,

    vi_Temp := vi_Cnt div 5;



    //글자수만큼 루프를돌립니다.

    for i:=1 to length(vs_Temp) -1 do

    begin

    if copy(vs_Temp,i,1) = '|' then

    begin

    vi_Loop := vi_Loop +1;



    //'|'의 갯수가 5개일때에 할 작업입니다.

    if vi_Loop mod 5 = 0 then

    begin



    // '|'의총갯수 가 5로나눈 나머지값을 위한변수입니다.

    vi_Cnt5 := vi_Cnt5+1;



    //첫라인의경우

    if vi_Cnt5 = 1 then

    begin

    vi_Mid := 1;

    vi_End := i;

    Memo1.Lines.Add(copy(vs_Temp, vi_Mid, vi_End));

    vi_Mid := vi_End+1;

    end;



    //두번째이상의 라인일경우

    if vi_Cnt5 > 1 then

    begin

    vi_End := i - vi_Mid +1;

    Memo1.Lines.Add(copy(vs_Temp, vi_Mid, vi_End));

    vi_Mid := vi_Mid + vi_End;



    //마지막의경우 나머지 스트링을 처리

    if (vi_Cnt5 = vi_Temp ) then

    Memo1.Lines.Add(copy(vs_Temp, i+1, Length(vs_Temp) - i));



    end;

    end;

    end;

    end;

    end;



    무지막지해서 지송함다...



  • Profile
    정성훈 2001.09.12 00:45
    초보자.. wrote:

    > 1|2|3|4|5|1|2|3|4|5|...

    > 이런식으로 나열된 스트링이 있습니다.

    > 근데 이것을

    > 1|2|3|4|5

    > 1|2|3|4|5

    > 이런식으로 잘라내고 싶습니다.

    > 무슨 방법이 없을까여?

    > Pos를 써봤는데 글자 하나하나 짤려서ㅣ ^^;;;

    > 답변 부탁드립니다 ^^;;;;

    >

    >



    안녕하세요

    음 보니까 일정한 규칙이네요

    그냥 가장 간단하게 생각하세요





    aa := 1|2|3|4|5|1|2|3|4|5|...



    만약 저게 aa 라구 가정.



    //버튼 클릭.

    procedure TForm1.Button1Click(Sender: TObject);

    var

    sStr : String;

    i, j : Integer;

    aa : String;

    begin

    j := 1;

    aa := Edit1.Text;



    Memo1.Lines.Add( Copy( aa, 1, 9 ) );

    for i := 1 to Length( aa ) do

    begin

    if j * 10 = i then

    begin

    Memo1.Lines.Add( Copy( aa, i + 1, 9 ) );

    Inc( j );

    end;

    end;

    end;

  • Profile
    초보자.. 2001.09.12 01:11
    답변감사드립니다 ^^

    님이 얘기하신 방법은 나열되있는 값이 완전히 규칙적이어야 할때 쓰는 방법인거 같은데요.

    제가 잘라내야하는 스트링값은 1|28806003000292|1000|1000|739|1|8806011010067|1000|500|739| <== 이것을



    1|28806003000292|1000|1000|739|

    1|8806011010067|1000|500|739| <== 이렇게하고싶은거였는데

    갯수는 일정하구요.



    제가 예문을 잘못드렸네요..

    답변 무지 무지 감사드립니다.

    행복하세요... ^.^;;;

    정성훈 wrote:

    > 초보자.. wrote:

    > > 1|2|3|4|5|1|2|3|4|5|...

    > > 이런식으로 나열된 스트링이 있습니다.

    > > 근데 이것을

    > > 1|2|3|4|5

    > > 1|2|3|4|5

    > > 이런식으로 잘라내고 싶습니다.

    > > 무슨 방법이 없을까여?

    > > Pos를 써봤는데 글자 하나하나 짤려서ㅣ ^^;;;

    > > 답변 부탁드립니다 ^^;;;;

    > >

    > >

    >

    > 안녕하세요

    > 음 보니까 일정한 규칙이네요

    > 그냥 가장 간단하게 생각하세요

    >

    >

    > aa := 1|2|3|4|5|1|2|3|4|5|...

    >

    > 만약 저게 aa 라구 가정.

    >

    > //버튼 클릭.

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > sStr : String;

    > i, j : Integer;

    > aa : String;

    > begin

    > j := 1;

    > aa := Edit1.Text;

    >

    > Memo1.Lines.Add( Copy( aa, 1, 9 ) );

    > for i := 1 to Length( aa ) do

    > begin

    > if j * 10 = i then

    > begin

    > Memo1.Lines.Add( Copy( aa, i + 1, 9 ) );

    > Inc( j );

    > end;

    > end;

    > end;