Esportazione di DataSet in formato 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 campiapici:=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;