EVL – ETL Tool

Products, services and company names referenced in this document may be either trademarks or registered trademarks of their respective owners.

Copyright © 2017–2023 EVL Tool, s.r.o.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts.

Table of Contents


(since EVL 2.2)

Read <file.csv>, guess data types or use <evd> file or <inline_evd> and write QVD file to <file.qvd> or standard output. For guessing data types (EVD) it uses utility ‘csv2evd’.

EVD is EVL data definition file, for details see man 5 evd.


  [-q|--quote=<char> | --optional-quote=<char>]
  [-a|--dos-eol | -b|--mac-eol]

  <file.csv> (<evd>|-d <inline_evd>)
  [-a|--dos-eol | -b|--mac-eol]

  ( --help | --usage | --version )


Standard options:

-d, --data-definition=<inline_evd>

either this option or the file <evd> must be presented to use already defined EVD

-a, --dos-eol

suppose DOS end-of-line, i.e. replace CR+LF (‘\r\n’) by LF (‘\n’) on input

-b, --mac-eol

suppose Mac end-of-line, i.e. replace CR (‘\r’) by LF (‘\n’) on input

-o, --output=<file.qvd>

write output into <file.qvd> instead of standard output

-v, --verbose

print to STDERR info/debug messages


print this help and exit


print short usage information and exit


print version and exit

EVD options:


by default it tries only ‘%Y-%m-%d’, then ‘%d.%m.%Y

-h, --header=<field_name>,...

use comma separated list of field names instead of header line, for example when there is no header in csv file (option ‘-n’ must be used) or when other field names should be used

-n, --no-header

with this option it suppose there is no header. Fields will be named ‘field_001’, ‘field_002’, etc.

-l, --null=<string>

to specify what string is used for NULL values in CSV, empty string is allowed


suppose optional quote character <char>, must be used together with ‘--separator

-q, --quote=<char>

do not guess if fields are quoted, but suppose <char> as quotation character

-s, --separator=<char>

do not guess the separator, but use <char> instead

-t, --datetime=<format>

by default it tries only ‘%Y-%m-%d %H:%M:%S


by default it tries only ‘%Y-%m-%d %H:%M:%S.%E*f


  1. Having ‘some.csv’:
    1;2019-06-06;some string

    The command:

    csv2qvd --null="NULL" some.csv > some.qvd

    will produce some.qvd file with these field:

    id       int               null="NULL"  sep=";"
    started  date("%Y-%m-%d")  null="NULL"  sep=";"
    value    string            null="NULL"  sep="\n"
  2. Following invocation will guess data types, field separator and if strings are quoted or not, and use header line for field names:
    csv2qvd table.csv > table.qvd

    With the ‘--verbose’ option it will write to standard error the whole EVD file which was used:

    csv2qvd --verbose table.csv > table.qvd
  3. To skip header and use different field names:
    csv2qvd --header="first_field,other_field,last_one"
      table.csv > table.qvd
  4. Case when there is no header in CSV file, but use specified field names:
    csv2qvd --no-header --header="first_field,other_field,last_one" \
      table.csv > table.qvd
  5. No header in CSV and use generated field names ‘field_001’, ‘field_002’, etc.:
    csv2qvd --no-header table.csv > table.qvd
  6. Consider specific date format, here day of year (‘001..366’), and ‘|’ as a field separator:
    csv2qvd --date="%j" -s '|' table.csv > table.qvd
  7. To use own (specific or already generated) EVD file (i.e. data types definition):
    csv2qvd table.csv table.evd > table.qvd