Q&A

  • Re: 파일을 불러와 동적 배열 변수에 저장하기
안녕하세요. 최용일입니다.



당연히 안되는 방법이네요. 아래에서 선언한 arr1은 정적인 변수가 아니라 포인터입니다.



읽을 때 위치를 지정을 하세요. 그렇지 않으면 변수 포인터를 바꿀려고 하기 때문에



Access Violation에러가 발생할 것입니다.



BlockRead(FH, Arr1[0] ,100) ;

Edit1.Text := PChar(Arr1) ;



그리고 SetLength나 GetMem으로 메모리에 변수를 할당한 뒤에는 반드시 SetLength(변수, 0)



이나 FreeMem 으로 포인터를 메모리에서 해제하세요. 파일도 닫아주시고요...



^^ 항상 즐코하세요.



이성윤 wrote:

> 파일을 open 하여 내용을 동적배열 변수에 저장코자 합니다.

>

> 그러나,거의 모든 방법을 다 시도 해봤지만 않됩니다.

> 당연히 되어야 하는 것이 않되니 화도 납니다.

> 정말 델파이에는 이러한 기능이 없는 걸까요 ??

> 그렇다면 파일을 불러와 Byte 단위로 처리해야하는 경우에는 어떻게 할수 있을까요 ??

>

>

> 않되고 있는 소스예제 (시도 1)

> var

> arr1 :array of byte ;

> fh:file of byte ;

> begin

> setlength(arr1,100) ;

> assignfile(fh,'c:autoexec.bat') ;

> reset(fh) ;

> blockread(fh,arr1,100) ;

> end; //결과를 보시면 않되는 것이 확인 될 것입니다.

>

> 소스 예제 (시도 2)

> var

> arr1 :pchar;

> fh:file of byte ;

> begin

> getmem(arr1,100) ;

> assignfile(fh,'c:autoexec.bat') ;

> reset(fh) ;

> blockread(fh,arr1,100) ;

> edit1.text:=arr1[1] ;

> end; //이것은 파스칼이 c와 달리 포인터와 배열을 별개의 것으로 처리하는데서

> //비롯되것 같은데 제가 원하는 딱 그부분이 않되고 있는것입니다.

>

>

> 그외에 포인터 변수를 2개 선언해서 주소 넘기고,기타등등 않해본것이 없습니다.

> 헌데,제가 원하는 결과를 얻지 못하고습니다.

>

> 저는 지금 파일을 불러와 바이트 단위로 처리를 하여 다시 저장하는

> 루틴을 짜야 하는데 윗 루틴이 필요합니다.

>

> 단,포인터 변수에 불러놓고 포인터를 inc,dec등으로 왔다 갔다 해서

> 읽어오는 방법은 너무 불편하여 사용하기가 힘이 듭니다.

> 왜냐면 저의 경우는 직접 arr1[100], arr1[30] 과 같이 직접 위치로

> 가야 하기 때문입니다.

> (만약 inc,dec등으로 처리한다면 포인터를 왔다리 갔다리 해야 하니까

> 너무 무식한 프로그래밍 같아서요)

>

> 제가 불평만 늘어 놓았는데

> 그도 그런것이 이것을 잡고 벌써 1주일째 해결방법을 못찾고 있습니다.

>

> 혹시나 아시는 불이 계시면 저좀 구제해 주세요.

>

> (그리고,제가 올린 첫번째 방법이 않되는것은 정말 이해가 않됩니다.

> 그것은 당연히 되어야 하는것 아닙니까 ?)

>

>

>

>

>

>

>

>

0  COMMENTS