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
2 Responses
Marcos
22|Apr|2014 1Existe possibilidade de deixar uma importação automática? Por exemplo, o código checa se existe o arquivo e importa? E fica fazendo isso varias vezes durante todo o dia.
Ricardo Pichler
22|Apr|2014 2Olá Marcos, basta usar os batch jobs. 🙂
Leave a reply