|
두번째 내용은
제가 코드를 잘못보고 , 답변을 잘못달았네요
죄송합니다.
프뉴마 님이 쓰신 글 :
: 답변에 정말 감사합니다 ^ㅡ^ 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개의 파일을 출력하는데 시간이 꽤 오래 걸리더군요. 출력 중엔
: : :
: : : 프로그램을 사용할 수 없으니 답답하기도 하구요.
: : :
: : : 아직은 기초적인 함수밖에 사용할 줄 몰라서요....좀 더 출력 속도를 높일 수 있는 방법은 없을까요?
|