저기 seek라는 함수는 텍스트 파일에서는 사용하지 않는다고 하는데요..
이파일은 *.dat파일이긴 한데 한줄씩 읽어서 db에 저장을 하기때문에 readln으로 읽어야하므로 변수를 textfile로 선언했거든요..
f : textfile;
AssignFile(F, s);
현재 위치를 알려면 f 를 file of byte로 선언해야하나요??
잘 몰라서 이렇게 했는데 seek를 이렇게 쓰는거 같지는 않아요..
어떻게 해야 정지된 다음 위치를 찾을수 있을까요??
procedure TForm1.MultiOpen(sss : string);
var
s : string[255];
i : integer;
kkk : string;
F : File of byte;
fh :integer;
iFileSize : integer;
yy,size:longInt;
FPointer:integer;
begin
//변수에 실제 파일 할당
AssignFile(F, sss);
Reset(f); //읽기전용으로 연다
i := 0;
//폼생성시 logfril에서 읽어온 index값을 integer로 변환
j := strtoint(xx);
yy := 99*j; //한레코드값*index값
ShowMessage(IntToStr(yy));
seek(f,yy+1);
(질문원본)
***************************************************
질문을드립니다.
file의 한레코드의 값을 구해서 인덱스를 곱해서 위치를 알고싶습니다.
인덱스는 레코드 첫글자부터 3자리입니다..
원래 하려는 의도는 file의 레코드 한줄을 읽어와서 한줄씩 디비에 저장하려구합니다.
중간에 멈추어 졌을경우를 생각해서 멈추었을때의 인덱스를 저장해두고
다시 프로그램을 돌리면 멈춘순간의 레코드 다음부터 읽어서 저장하려하는데
그 멈춘순간의 위치를 찾는것을 못하겠습니다..
이위치를 잡아주는게 pointer인가요??
델파이에서 한번두 pointer를 접해본적이 없는데요..
어떻게 해야하는지
file은 이렇게 들어가 있습니다.
001 1231231213213131313123131231
002 5332423423424234234234234234
003 2326599446464646464646464669
. .
. .
. .
. .
만약 001이 있는 한줄을 읽은후 프로그램이 죽으면 다시 실행하면 002의 한 레코드를 읽어야 하는데 그 위치를 어떻게 잡아야 하는지 모르겠습니다..
AssignFile(F, sss); //파일할당
Reset(f); //파일열구
Readln(f,s); //한라인을 읽어들입니다.
b := strtoint(IntToStr(Length(s))); //레코드길이를 구하기
j := strtoint(xx); //001줄에서 멈추었을시 xx는 인덱스값을 변수로 받고
yy := b*j; //한레코드값*index값을 곱한값을변수에넣구
그담에 레코드 다음번째의 002가 있는 레코드위치를 어떻게 찾나요...
그걸모르겟어요--;
두번째 002부터 readln으로 읽어야 하는데..
아시는분 부탁드립니다...
^^;
텍스트파일이라면 그냥 ReadLn으로 읽으시면 될거 같네요...
11번째에서 에러났다면 다음번엔 10번은 그냥 읽으시면 되죠... 아무런 작업않하고요...
for I := 1 to 10 do
ReadLn(F, s);
다음줄(11번째줄)부터 DB에 넣기
파일크기가 별로 안 크다면 TStringList를 사용하시면 간단히 해결될거 같네요...
TStringList.Strings[0] -> 1번째줄
TStringList.Strings[1] -> 2번째줄
TStringList.Strings[2] -> 3번째줄
TStringList.Strings[3] -> 4번째줄
......
^^ 항상 즐코하세요...