'Linefeed'에 해당되는 글 1건

  1. 2008/04/15 귀차니스트 \r\n 과 \n 차이 때문에 생기는 문제

  POSIX 운영체제와 윈도우즈 환경을 왔다갔다 사용하셨던 분은 아마도 똑같은 문제를 한 번쯤 겪어보셨을 것이라고 생각합니다. 무엇이냐구요? 아마도 주로 텍스트 쪽에서 생기는 문제일겁니다. 어떤땐 php소스를 업로드 했다가 다운로드 받았더니 그런 적도 있었습니다.



  바로 위와 같은 현상들!! 이제 아~ 아시는 분이 계시진 않는가요? 아니면 이미 눈치채셨을지도 모르겠군요. 이 현상의 원인은 뉴라인에 대한 데이터가 달라서 생기는 문제입니다. 노트패드에서는 "\r\n"이 들어와야만 새줄로 취급을 하게 되죠. 워드패드나 좀 고급스러운 기능을 지원하는 글 편집기에서 열어보시면 아마도 이와 같은 문제는 보이지 않을겁니다.
  이게 대학교 1학년 말쯤인지, 2학년 1학기 쯤인지는 잘 모르겠지만 데이터를 읽다가 이런 현상을 보게 되었고 그 때 간단하게 프로그램도 만들어서 썼습니다. GUI는 아니더라도 콘솔로 만들어 썼습니다.
  첨부한 파일을 실행하면 됩니다. 굳이 어렵지 않게 그냥 exe파일을 어디에 둔 다음 원하는 변환 파일을 exe파일 위로 드래그앤 드롭하시면 됩니다. 지금와서 굳이 GUI로 만드는 것도 왠지 아닌것 같고, 복잡한 코드가 아닌 아주 간단한 코드기에 그냥 올립니다.

Convert.cpp (Language : cpp)
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. void remakeName( char *srcName, char *dstName );
  5. int main( int argc, char **argv )
  6. {
  7.     char OutFilename[ 256 ] = {0};
  8.     if( argc <= 1 ) {
  9.         return 0;
  10.     }
  11.     for( int i = 1; i < argc; i++ ) {
  12.         ifstream inFile;
  13.         ofstream outFile;
  14.         memset( OutFilename, 0, sizeof( OutFilename ));
  15.         inFile.open( argv[i], ios::in );
  16.         remakeName( argv[i], OutFilename );
  17.         if( inFile.is_open() )
  18.         {
  19.             cout << argv[i] << " -> " << OutFilename << endl;
  20.             outFile.open( OutFilename , ios::out );
  21.             while( inFile.peek() != -1 )
  22.             {
  23.                 char inChar = inFile.get();
  24.                 if( inChar == 10 )
  25.                     inChar = '\n';
  26.                 outFile.put( inChar );
  27.             }
  28.             outFile.close();
  29.             inFile.close();  
  30.         }
  31.     }
  32.     return 0;
  33. }
  34. void remakeName( char *srcName, char *dstName )
  35. {
  36.     char *indexDot = strchr( srcName, '.' );
  37.     int cpChar = indexDot - srcName;
  38.     strncpy( dstName, srcName, cpChar );
  39.     strcat( dstName, "_1" );
  40.     strcat( dstName, indexDot );
  41. }

  예전에 C++ 코드로 C 스타일 코딩을 했던건데, 그냥 어떻게 이루어졌는지만 대충 훑으시면 됩니다. 파일 명이 들어오면 _1 을 덧붙여서 저장해주는 것으로 되어있습니다. 굳이 다른건 어려운 것도 아니니 프로그램이 혹시 필요하시면 사용하시면 됩니다.


크리에이티브 커먼즈 라이센스
Creative Commons License
2008/04/15 22:07 2008/04/15 22:07

댓글을 달아 주세요