Esportazione di DataSet in formato CSV

csvNecessità: esportare il risultato di una query in un file CSV.

Soluzione: creazione di una procedure per l’esportazione dinamica di DataSet.

La procedura SaveAsCSV prevede due argomenti:

  • myFileName (percorso di destinazione e nome del file)
  • myDataSet (DataSet contenente il risultato della query da esportare)
procedure SaveAsCSV(myFileName: string; myDataSet: TDataSet);
var
    myFile: TextFile;
    i: integer;
    s,divisore: string;
    apici,intestazione: Boolean;
begin
    AssignFile (myFile, myFileName);  // Creo il file
    Rewrite(myFile);                  // Se esiste sovrascrivo i dati
    s := '';                          // Inizializzo la variabile s
    divisore:=';';                    // Definisco il separatore dei campi
    apici:=False;                     // Definisco se i campi devono essere racchiusi tra apici o meno
    intestazione:=true;               // Definisco se nella prima riga del file devono essere
                                      // riportati i nomi delle colonne della tabella
  try
    if intestazione then begin  // se intestazione=true esporto le intestazioni di colonna nel file csv
      s := '';
      for i := 0 to myDataSet.fieldCount -1 do
      begin
        if i= myDataSet.fieldCount -1 then begin
          divisore:='';
        end else
          divisore:=';';
        if apici=True then begin
          s := s + Format('"%s"'+divisore, [myDataSet.Fields[i].FieldName]);
        end else begin
          s := s + Format('%s'+divisore, [myDataSet.Fields[i].FieldName]);
        end;
      end;
      Writeln(myFile, s);    // scrivo i dati sul file
    end;
    //lettura ciclica delle righe del DataSer
    while not myDataSet.Eof do
    begin
      s := '';
      //lettura ciclica delle colonne della tabbela e creazione della riga CSV
      for i := 0 to myDataSet.fieldCount -1 do
      begin
        if i= myDataSet.fieldCount -1 then begin divisore:='';
        end else divisore:=';';
        if apici=True then begin
          s := s + Format('"%s"'+divisore, [myDataSet.Fields[i].AsString]);
        end else begin
          s := s + Format('%s'+divisore, [myDataSet.Fields[i].AsString]);
        end;
      end;
        Writeln(myFile, s);  // scrivo i dati sul file
        myDataSet.Next;      // passo alla prossima riga della query
      end;
   finally
      CloseFile(myFile);  // al termine chiudo il file
   end;
end;

SaveAsCSV

Ti potrebbe interessare anche...