|
답변에 정말 감사합니다 ^ㅡ^ 1번 개선사항으로 확 달라지네요ㅎ
2번에 말씀해주신 내용의 경우..1240개의 short형 데이터가 총 401개 있는 건데요,
그것을 동적배열로 선언해서 한꺼번에 읽어서..1240개씩 끊어서 출력하도록 작성한 것입니다.
(아직 동적배열을 다차원으로 선언할 줄을 몰라서요 ㅠㅋ)
그래서 저렇게 하는 것이 맞다..고 생각했는데, 틀린걸까요? 저렇게 뽑아서 파일마다 데이터를 보니
수치가 다른걸보니 맞는 것 같은데...TeeChart로 그리는데 모양이 개판이라 뭔가 잘못됐다 싶긴하지만요 ㅠㅋ
장성호 님이 쓰신 글 :
: 400개의 file을 저장하려는데...
:
: File을 열었다가(fopen) 닫는(fclose)동작은 파일하나에 1240번씩 반복하네요
:
: 같은파일에 한번 열때 1Byte밖에 쓰지 않고..
:
: 또 400개 파일이 아니라 401개 네요
:
: 총 401*1240번 파일을 열었다 닫았다를 반복하네요
:
:
: 개선은?
:
: 1) 하나의 파일은 한번만 open해서 모두 쓰고 난후에 close하세요
: (두번째 for문 안에있는 fopen과 fclose를 for문 밖으로..)
:
:
: 2) 추가로..
: pArray에 데이타는 모두 같은 데이타 인데..
: 파일이름만 바꿔서 쓰고있네요
: 파일에 쓸때마다 매번 fprintf로 쓰지 말고
: for문 밖에서 pArray에 내용을 모두 변환해둔후에 ...
: 한번에 쓰는것이 훨씬 효율적일것입니다.
:
: 또는 파일하나 만들어두고 이름만 바꿔서 복사할수도 있구요
:
:
: 그럼..
:
: 프뉴마 님이 쓰신 글 :
: : void __fastcall TForm1::Button3Click(TObject *Sender) //tmp 파일 분할 출력
: : {
: : int DataSize = 1240;
: : int scanPts = 401;
: : //data type = short(2byte)
: :
: :
: : short *pArray = new short [DataSize*scanPts];
: :
: :
: : FILE *infile = fopen("d:\\test1.tmp","rb");
: :
: : fseek(infile, 54806, SEEK_SET);
: :
: : fread(pArray, sizeof(short), (DataSize*scanPts), infile);
: :
: : fclose(infile);
: :
: :
: : for(int i=0; i < scanPts; i++)
: : {
: : AnsiString FileName = "d:\\test\\test1_no.";
: :
: : AnsiString TmpFileName = (FileName + IntToStr(i) + ".tmp");
: :
: :
: : for(int j=0; j < DataSize; j++)
: : {
: : FILE *OutFile = fopen(TmpFileName.c_str(), "wb");
: :
: : fprintf(OutFile, "%hd ", pArray[(i*DataSize) + j]);
: :
: : fclose(OutFile);
: : }
: : }
: :
: :
: :
: : delete [] pArray;
: : }
: :
: : 코드는 이렇습니다. test1tmp를 읽어들여서 일정크기만큼 분할해서 출력하는 코드인데요.
: :
: : 제가 초보인지라 스레드는 모르고...이렇게 출력하다보니 400개의 파일을 출력하는데 시간이 꽤 오래 걸리더군요. 출력 중엔
: :
: : 프로그램을 사용할 수 없으니 답답하기도 하구요.
: :
: : 아직은 기초적인 함수밖에 사용할 줄 몰라서요....좀 더 출력 속도를 높일 수 있는 방법은 없을까요?
|