2014-09-15 4 views
-3

모두.큰 텍스트 파일 처리 오류

대용량 텍스트 파일 (예 : 30GB)에서는 아래 프로그램이 실행되지 않습니다.

이 프로그램은 단순히 텍스트 파일 형식을 변환하기위한 것입니다.

문제 해결 방법을 알려주십시오.

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <sstream> 
#include </usr/include/pcl-1.7/pcl/io/pcd_io.h> 
#include <pcl/point_types.h> 

int main (int argc, char** argv) 
{ 
    int r,g,b; 

    if(argc!=3) 
    { 
fprintf(stderr,"Usage:%s\n(1)Input_XYZRGB_filename\n(2)Output_PCD_filename\n",argv[0]); 
      exit(1); 
    } 


    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGB>); 
    std::ifstream ifs(argv[1]); 
    std::string buf; 

    for(size_t i=0; ifs && getline(ifs, buf); i++) 
    { 

      // std::cout << buf << std::endl; 
      std::istringstream is(buf); 

      pcl::PointXYZRGB pnt; 
      is >> pnt.x 
      >> pnt.y 
      >> pnt.z 
      >> r 
      >> g 
      >> b; 
      pnt.r= (uint8_t)r; 
      pnt.g= (uint8_t)g; 
      pnt.b= (uint8_t)b; 
      cloud->push_back (pnt); 
    } 
    pcl::io::savePCDFileASCII(argv[2], *cloud); 

    return 0; 
} 
+0

작동하지 않는 기능은 무엇입니까? 오류 메시지가 나타 납니까? 더 구체적으로 말하십시오. – TartanLlama

+0

내 첫 번째 내기는 RAM이 부족하다는 것입니다. 핵심은 매우 큰 파일을 스트림으로 처리하고 파일 포인터가 데이터 유형을 오버 플로우 할 수 있다는 점에 매우주의해야한다는 것입니다. 정말로, "그것은 작동하지 않습니다"는 끔찍한 문제 설명입니다. –

+0

그래서 30GB 파일을 메모리로 읽은 다음 새 파일에 다시 쓰기 전에 저장하고 있습니까? 얼마나 많은 메모리가 컴퓨터에 저장되어 있습니까? 데이터를 바이너리 형식으로 저장하려면 적어도 10-15GB가 필요합니다. –

답변

1

파일 입출력 라이브러리가 큰 파일을 지원하는지 확인하십시오. 설명서를 읽을 수 있습니다. 또한 탐색 작업에서 파일 위치 매개 변수의 크기를 확인하십시오. 대용량 파일을 지원하려면 32가 아닌 64 비트 여야합니다. MS Visual C++에서 표준 iostream은 대용량 파일을 지원하지 않습니다. 그러나 _sopen_s, _read, _close, _lseeki64 등의 저수준 입출력 기능을 사용할 수 있습니다. gcc와 mingw에서는 _sopen, read, close, lseek 함수를 사용할 수 있습니다.