C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[69386] Re:Re:Re:파일 출력을 실행하는데 속도가 너무 느립니다..좀 더 빠르게 할 수 있는 방법이 없을까요?
장성호 [nasilso] 2476 읽음    2013-04-24 14:03
두번째 내용은
제가 코드를 잘못보고 ,  답변을 잘못달았네요
죄송합니다.


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

+ -

관련 글 리스트
69383 파일 출력을 실행하는데 속도가 너무 느립니다..좀 더 빠르게 할 수 있는 방법이 없을까요? 프뉴마 5402 2013/04/24
69384     Re:파일 출력을 실행하는데 속도가 너무 느립니다..좀 더 빠르게 할 수 있는 방법이 없을까요? 장성호 4864 2013/04/24
69385         Re:Re:파일 출력을 실행하는데 속도가 너무 느립니다..좀 더 빠르게 할 수 있는 방법이 없을까요? 프뉴마 3023 2013/04/24
69386             Re:Re:Re:파일 출력을 실행하는데 속도가 너무 느립니다..좀 더 빠르게 할 수 있는 방법이 없을까요? 장성호 2476 2013/04/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.