Tabelas CSV

Exemplo 1

Exemplo: gramática para ficheiros tipo CSV com os seguintes requisitos:

  1. A primeira linha indica o nome dos campos (deve ser escrita sem nenhuma formatação em especial);

  2. Em todas as linhas que não a primeira associar o valor ao nome do campo (devem ser escritas com a associação explicita, tipo atribuição de valor com field = value.

grammar CSV;
file: line line* EOF;
line: field (SEP field)* '\r'? '\n';
field: TEXT | STRING | ;
SEP: ',';
STRING: [ \t]* '"' .*? '"' | [ \t]*;
TEXT: ~[, "\r\n]~[,\r\n]*;

Exemplo 2

grammar CSV;
@header {
import static java.lang.System.*;
}
@parser::members{
    protected String[] names = new Strin[0];
    public int dimNames() { ... }
    public void addName(String name) { ... }
    public String getNames(int idx) { ... }    
}

file: line[true] line[false]* EOF;

line[boolean firstLine]
    locals[int col=0]
    @after {if (!firstLine) out.println();}
    : field[$firstLine,$col++] (SEP field[$firstLine,$col++])* '\r'? '\n';

field[boolean firstLine , int col]
    returns[String res = ""]
    @after {
        if($firstLine)
            addName($res);
        else if($col >= 0 && $col < dimNames())
            out.print(" "+getName($col)+": "+$res);
        else
            err.println("\nERROR: invalid field \""+$res+"\" in column "+($col+1));
    }
    :
    (TEXT {$res = $TEXT.text.trim();}) |
    (STRING {$res = $STRING.text.trim();}) |
    ;
    
SEP: ',';
STRING: [ \t]* '"' .*? '"' [ \t]*;
TEXT: ~[,"\r\n]~[.\r\n]*;

Last updated