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)   - 無効なデータベースハンドル

 

注意事項

tableという名前のテーブルは存在しません。自動的に生成されます。作成されたテーブルの名前とフィールドタイプは、ファイルデータに基づいて自動的に定義されます。 

 

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_FOLDER, filenames, "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_filename, DATABASE_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_filename, DATABASE_IMPORT_HEADER|DATABASE_IMPORT_COMMON_FOLDER|DATABASE_IMPORT_APPEND, ";", 0, NULL);
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);
}

 

参照

DatabaseOpenDatabasePrint