DatabaseImport

데이터를 파일에서 테이블로 가져오기.

long  DatabaseImport(
   int           database,          // DatabaseOpen에서 수신된 데이터베이스 핸들
   const string  table,             // 데이터를 삽입할 테이블의 이름
   const string  filename,          // 데이터를 가져욜 파일의 이름
   uint          flags,             // 플래그의 조합
   const string  separator,         // 데이터 분리자 
   ulong         skip_rows,         // 생략할 초기 문자열 수 
   const string  skip_comments      // 설명 정의 문자 문자열
   );

매개변수

database

[in] DatabaseOpen()로 수신된 데이터베이스 핸들.

table

[in]  파일의 데이터를 추가할 테이블의 이름.

filename

[in]  데이터를 읽기 위한 CSV 파일 또는 ZIP 아카이브. 이름은 하위 디렉토리를 포함할 수 있으며 MQL5\Files 폴더를 기준으로 설정됩니다.

flags

[in]  플래그의 조합 ENUM_DATABASE_IMPORT_FLAGS 열거형에서.

separator

[in]  CSV 파일의 데이터 분리자.

skip_rows

[in]  파일에서 데이터를 읽을 때 건너뛸 초기 문자열 수.

skip_comments

[in]  문자열을 코멘트로 지정하기 위한 문자열. 문자열 시작 부분에서 skip_comments의 문자가 감지되면 면 이러한 문자열은 주석으로 간주되며 가져오지 않습니다.

반환 값

가져온 문자열의 수를 반환하거나 오류 발생 시 -1을 반환. 오류 코드를 가져오려면 GetLastError()를 사용해야 하며, 가능한 응답은 다음과 같습니다:

  • ERR_INVALID_PARAMETER (4003)              –  테이블 이름이 지정되지 않음 (빈 문자열 또는 NULL);
  • ERR_DATABASE_INTERNAL (5120)              – 내부 데이터베이스 오류;
  • ERR_DATABASE_INVALID_HANDLE (5121)   - 유효하지 않은 데이터베이스 핸들.

 

ENUM_DATABASE_IMPORT_FLAGS

ID

설명

DATABASE_IMPORT_HEADER

첫 번째 줄에는 테이블 필드의 이름이 포함됩니다.

DATABASE_IMPORT_CRLF

CRLF (디폴트는 LF)는 문자열 나누기로 간주됩니다

DATABASE_IMPORT_APPEND

현재 테이블 끝에 데이터를 추가합니다

DATABASE_IMPORT_QUOTED_STRINGS

큰따옴표로 묶인 문자열 값

DATABASE_IMPORT_COMMON_FOLDER

파일은 모든 클라이언트 터미널의 \Terminal\Common\File의 공통 폴더에 저장됩니다.

DatabaseExport 예시 코드로 부터 생성된 파일에서 테이블을 읽는 예:

/+------------------------------------------------------------------+
//| 프로그램 시작 함수 스크립트                                        |
/+------------------------------------------------------------------+
void OnStart()
 {
  string csv_filename;
//--- 클라이언트 터미널의 공통 폴더에서 다운로드할 텍스트 파일의 이름을 가져옵니다.
  string filenames[];
  if(FileSelectDialog("Select a CSV file to download a table"NULL,
                      "Text files (*.csv)|*.csv",
                      FSD_WRITE_FILE|FSD_COMMON_FOLDERfilenames"data.csv")>0)
   {
 //--- 선택한 각 파일의 이름 표시
    if(ArraySize(filenames)==1)
      csv_filename=filenames[0];
    else
     {
      Print("Unknown error while selecting file. Error code "GetLastError());
      return;
     }
   }
  else
   {
    Print("CSV file not selected");
    return;
   }
//--- 데이터 베이스 생성 혹은 열기
  string db_filename="test.sqlite";
  int db=DatabaseOpen(db_filenameDATABASE_OPEN_READWRITE|DATABASE_OPEN_CREATE);
//--- TEST 테이블이 존재하는지 확인
  if(DatabaseTableExists(db"TEST"))
   {
    //--- TEST 테이블 제거
    if(!DatabaseExecute(db"DROP TABLE IF EXISTS TEST"))
     {
      Print("Failed to drop the TEST table with code "GetLastError());
      DatabaseClose(db);
      return;
     }
   }
 //--- 파일에서 TEST 테이블로 항목 가져오기
  long imported=DatabaseImport(db"TEST"csv_filenameDATABASE_IMPORT_HEADER|DATABASE_IMPORT_COMMON_FOLDER|DATABASE_IMPORT_APPEND";"0NULL);
  if(imported>0)
   {
    Print(imported," lines imported in table TEST");
    DatabasePrint(db,"SELECT * FROM TEST",DATABASE_PRINT_NO_INDEX);
   }
  else
    {
     Print("DatabaseImport() failed. Error ",GetLastError());
    }
//--- 데이터 베이스 파일을 닫고 알리기
  DatabaseClose(db);
  PrintFormat("Database: %s closed"db_filename);
 }

참고

테이블 이름이 지정된 테이블이 없으면 자동으로 생성됩니다. 생성된 테이블의 이름 및 필드 유형은 파일 데이터를 기반으로 자동으로 정의됩니다.  

 

추가 참조

DatabaseOpen, DatabasePrint