Q&A

  • 문자열을 배열에 넣으려 하는데 ....
안녕하세요.



혼자 해결하기 어려워서 이곳에 문의 드립니다



여러 고수님의 도움 바랍니다.



다름이 아니고 Text파일을 읽어서 StringGrid의 셀에 분리해서 넣으려 합니다.



Text파일의 각 항목들은 '|'로 구분되어 있는 거구요.



그런데 이것을 한 라인단위로 읽어서 1바이트씩 배열에 넣으려 하니깐 안돼요.



너무 허술해서 보여주기 창피하지만 몇일 고생하고나니 이젠 부끄러움도 몰겠네요.



// 이하는 저의 소스입니다.//



procedure Test.OpenBtnClick(Sender: TObject);

var

TempArray : array[1..1000] of char;

TempSave, fname, InString : String;

TempField : char;

InFile : TextFile;

LenString, RowCnt, C, R, i, j : integer;



begin

If OpenDialog1.Execute then

begin

fname := OpenDialog1.FileName;

AssignFile(InFile, fname);



Reset(InFile);

While not EOF(InFile) do

begin

RowCnt := RowCnt + 1; //텍스트파일의 행수를 발췌

readln(InFile);

end;



CloseFile(InFile);

SG1.RowCount := RowCnt;



Reset(InFile);



While not EOF(InFile) do

begin

R := R + 1;

read(InFile, TempSave);

LenString := Length(TempSave); //행의 길이를 얻기



for i := 1 to LenString do

begin

TempArray[i] := copy(TempSave, i, 1); //이부분에서 자꾸 에러나요!!!

end;



for j := 1 to LenString do

begin

if TempArray[j] = '|'

then

SG1.Cells[C, R] := TempField;

TempField := '';

C := C + 1;

else

TempField := TempField + TempArray[j];

end;

end;

readln(InFile); //다음행으로 커서를 옮기자

end;

end;

end;



에러메세지 - [Error] DM1.pas(363): Incompatible types: 'Char' and 'String'



대체 뭘 어떻게 해야 이 문제를 해결할 수 있을까요?





3  COMMENTS
  • Profile
    바람개비 2001.02.14 18:28
    배열을 다른목적으로 쓸것이 아니라면

    이렇게 해보시져!



    var

    f:textfile;

    buffers,str:string;

    cnt,col,ps:word;

    StrList: TStringList;

    LineCount: Integer;



    begin

    StrList := TStringList.Create;

    StrList.LoadFromFile('c:test.txt');

    LineCount := StrList.Count; //텍스트파일의 라인수를 구한다.

    StrList.Free;



    assignfile(f,'c:test.txt');

    reset(f);

    stringgrid1.rowcount:= LineCount;



    col:=0;

    while not eof(f) do begin

    readln(f,buffers); //한줄을 읽어서

    inc(col);

    str:=buffers;

    cnt:=0;

    while str<>'' do begin // 문자열이 빌때까지 계속하라.

    ps:=pos('|',str); //구분자의 위치를 알아낸후

    stringgrid1.cells[cnt,col]:=copy(str,1,ps-1); // 구분자 이전까지 잘라 넣고

    str:=copy(str,ps+1,length(str)); //원래의 스트링을 구분자까지 잘라낸다.

    inc(cnt);

    end;

    end;

    end;



    바라미~~



  • Profile
    강대룡 2001.02.24 22:05
    늦었지만....



    도움주신데 대하여 이렇게 늦게 감사드리는 말씀 띄워 죄송합니다.



    너무도 감사합니다.



    진심으로 감사드립니다.



    몇날을 더 고생했을 지도 모르는데 이렇게 도와주셔서



    제딴에 훌륭한 프로그램을 완성하게 되었습니다.



    다시한번 감사드립니다.



  • Profile
    강대룡 2001.02.14 19:09
    고마워요