A idéia deste artigo é demonstrar como é fácil importar dados de arquivos texto, onde as linhas são delimitadas por “\n” e os campos são delimitados por “;”.

Criei uma tabela com dois campos, nome e sobrenome, só para podermos usar aqui e não complicar nada!

Vamos lá:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
static void doImport(Args _args)
{
    //Nome da tabela que receberá os dados
    tblNameAndSurname  myTable;
    //Objeto para manipular o arquivo
    AsciiIO                    inFile;
    //Objeto que é usado para definir o nome do arquivo
    Filename                  filename;  
    //Objeto que irá armazenar cada linha
    Container                 line;
    Dialog                     dialog;
    DialogField               dialogField;
    ;
 
/*
    Montando a Dialog para exibir a caixa de seleção de arquivo à ser importado
    Caso não queira usar isso, basta definir o fileName igual ao caminho do arquivo
    Exemplo filename = "C:\\arquivo.txt";
*/
    dialog = new Dialog("Importando dados para tabela de nome e sobrenome");
    dialogfield = dialog.addField(typeid(Filenameopen), "Nome do arquivo");
    dialog.run();
 
    if (dialog.run())
    {
        filename = (dialogfield.value());
    }
 
    //Abrindo o arquivo e verificando se ele está ok
    inFile = new AsciiIO (filename, 'R');
    if (!inFile || infile.status() != IO_Status::Ok )
    {
        throw error (strfmt("@SYS19312", filename));
    }
 
    infile.inRecordDelimiter('\n');
    infile.inFieldDelimiter(';');
 
    while (infile.status() == IO_status::Ok)
    {
        line = infile.read();
 
        if (line)
        {
            myTable.name = conpeek(line,1);
            myTable.surname = conpeek(line,2);
            myTable.insert();
        }
    }
}

[]s
Ricardo Pichler