내용a | 내용a |내용a |내용a
내용b | 내용b |내용b |내용b
내용c | 내용c |내용c |내용c
내용d | 내용d |내용d |내용d
내용e | 내용e |내용e |내용e
텍스트화일 : 은 위와 같이 구성되어 있고..이 내용을 읽어와서
스트링그리드에 뿌려야 합니다.
제 생각엔 파일을 읽어들이고 구조체배열을 만들어 내용들을 각각
구조체에 넣은뒤...스트링 그리드에 넣어야 한다고 생각되는데..
맞는 건지..
맞다면...코딩에서 어떻게 구현을 해야할지..
> 내용a | 내용a |내용a |내용a
> 내용b | 내용b |내용b |내용b
> 내용c | 내용c |내용c |내용c
> 내용d | 내용d |내용d |내용d
> 내용e | 내용e |내용e |내용e
>
> 텍스트화일 : 은 위와 같이 구성되어 있고..이 내용을 읽어와서
> 스트링그리드에 뿌려야 합니다.
> 제 생각엔 파일을 읽어들이고 구조체배열을 만들어 내용들을 각각
> 구조체에 넣은뒤...스트링 그리드에 넣어야 한다고 생각되는데..
> 맞는 건지..
>
> 맞다면...코딩에서 어떻게 구현을 해야할지..
이재식 Wrote :
안녕하세요?
위처럼 고정된 포맷 데이터파일 읽기에서는
구조체까지 쓰시지 않아도 될 것 같아요.
사실 구조체라 아니라 델에서는 레코드라고 주로 그러더라구요.
저는 주로 이렇게 하거든요.
방법이 편한더라구요. 저한테는. ^^
var
FileH : TextFile ;
Line : integer ;
contA : string[크기1] ;
contB : string[크기2] ;
contC : string[크기3] ;
contD : string[크기4] ;
// 여기서 크기란 실제 숫자를 의미하는데요,
파일형식을 보니까 각각의 내용이 고정길이를 가지고
있는 것 같아요.
가령, 크기 1이란 내용a의 시작 칼럼에서부터 내용b의 시작칼럼전까지의
칼럼수가 되겠죠.
즉, 이렇게 되면 뒤에 공백이 들어갈텐데 이것은 Trim으로 제거하면 됩니다.
begin
AssignFile (FileH, 'c:test.txt') ; // 가령 파일경로및 이름이
이렇다고 합시다.
Reset (FileH) ;
while not Eof(Fileh) do
begin
line := StringGrid1.RowCount - 1 ;
Read(FileH, contA) ;
Read(FileH, contB) ;
Read(FileH, contC) ;
Read(FileH, contD) ;
StrigGrid1.Cells[0, line] := Trim(ContA) ;
StrigGrid1.Cells[1, line] := Trim(ContB) ;
StrigGrid1.Cells[2, line] := Trim(ContC) ;
StrigGrid1.Cells[3, line] := Trim(ContD) ;
StringGrid1.RowCount := StrGrid1.RowCount + 1 ;
ReadLn (FileH) ;
end ;
StrGrid1.RowCount := StrGrid1.RowCount - 1 ;
end ;
실제 실행시켜본 내용이 아니니까 한번 해보시고
에러가 있으면 수정하세요.
참, 폼위에 스트링 그리드를 올려놓으시고 fixcols의 개수는 0으로 합니다.
그리고, rowcount개수는 2로 합니다.
칼럼의 개수는 적당히 하시면 될것같아요(위에서는 4개로 하시면 됩니다.)
strigGrid1.cells[열, 행]으로써, 둘 다 0부터 시작합니다.
맨 위 [0, 0], [1,0], [2,0], [3,0]에는 제목이 있어야 겠죠.