DatabaseImport

Importa i dati da un file in una tabella.

long  DatabaseImport(
   int           database,          // handle di database ricevuto in DatabaseOpen
   const string  table,             // nome di una tabella per inserire dati
   const string  filename,          // nome di un file per importare dati
   uint          flags,             // combinazione di flags
   const string  separator,         // separatore di dati 
   ulong         skip_rows,         // quante stringhe iniziali saltare 
   const string  skip_comments      // stringa di caratteri che definiscono i commenti
   );

Parametri

database

[in] Handle database ricevuto in DatabaseOpen().

table

[in] Nome di una tabella in cui aggiungere i dati di un file.

filename

[in] file CSV o archivio ZIP per la lettura dei dati. Il nome può contenere sottodirectory ed è impostato rispetto alla cartella MQL5\Files.

flags

[in]  Combinazione di flag dall'enumerazione ENUM_DATABASE_IMPORT_FLAGS.

separator

[in] Separatore di dati nel file CSV.

skip_rows

[in] Numero di stringhe iniziali da saltare durante la lettura dei dati dal file.

skip_comments

[in] Stringa di caratteri per designare stringhe come commenti. Se qualche carattere di skip_comments viene rilevato all'inizio di una stringa, tale stringa viene considerata un commento e non viene importata.

Valore di Ritorno

Restituisce il numero di stringhe importate o -1 in caso di errore. Per ottenere il codice di errore, utilizzare GetLastError(), le possibili risposte sono:

  • ERR_INVALID_PARAMETER (4003)              –  nessun nome tabella specificato (stringa vuota o NULL);
  • ERR_DATABASE_INTERNAL (5120)              – errore interno al database;
  • ERR_DATABASE_INVALID_HANDLE (5121)   - handle di database non valido.

 

Nota

Se non esiste una tabella denominata table, viene generata automaticamente. Nomi e tipi di campi nella tabella creata vengono definiti automaticamente in base ai dati del file.  

ENUM_DATABASE_IMPORT_FLAGS

ID

Descrizione

DATABASE_IMPORT_HEADER

La prima riga contiene i nomi dei campi della tabella

DATABASE_IMPORT_CRLF

CRLF (l'impostazione predefinita è LF) è considerata un'interruzione di stringa

DATABASE_IMPORT_APPEND

Aggiunge dati alla fine di una tabella esistente

DATABASE_IMPORT_QUOTED_STRINGS

Valori stringa racchiusi tra virgolette

DATABASE_IMPORT_COMMON_FOLDER

Il file è archiviato nella cartella common di tutti i terminali client \Terminal\Common\File.

Esempio di lettura della tabella dal file creato dal codice d'esempio DatabaseExport:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
  string csv_filename;
//--- ottiene i nomi dei file di testo da scaricare dalla cartella common dei terminali client
  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)
   {
    //--- visualizza il nome di ogni file selezionato
    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;
   }
//--- crea o apre un database
  string db_filename="test.sqlite";
  int db=DatabaseOpen(db_filenameDATABASE_OPEN_READWRITE|DATABASE_OPEN_CREATE);
//--- controlla se la tabella TEST esiste
  if(DatabaseTableExists(db"TEST"))
   {
    //--- rimuove la tabella TEST
    if(!DatabaseExecute(db"DROP TABLE IF EXISTS TEST"))
     {
      Print("Failed to drop the TEST table with code "GetLastError());
      DatabaseClose(db);
      return;
     }
   }
  //--- importa le voci dal file alla tabella 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());
    }
//--- chiude il file del database e lo comunica
  DatabaseClose(db);
  PrintFormat("Database: %s closed"db_filename);
 }

Guarda anche

DatabaseOpen, DatabasePrint