<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><category>pcsoft.br.windev</category><copyright>Copyright 2026, PC SOFT</copyright><lastBuildDate>30 Jul 2025 03:28:10 Z</lastBuildDate><pubDate>30 Jul 2025 03:28:10 Z</pubDate><description>Boa noite &#13;
&#13;
Segue abaixo uma procedure em WLanguage (WL) para ler um arquivo CSV e retornar uma array of string com os dados de cada linha, já separado por colunas:&#13;
&#13;
⸻&#13;
&#13;
✅ Procedure ReadCSVFile&#13;
&#13;
// 📁 ReadCSVFile - Lê um arquivo CSV e retorna uma array de arrays de strings&#13;
// ⚙️ Parâmetros:&#13;
//    sFilePath: string -&gt; Caminho completo do arquivo CSV&#13;
//    sSeparator: string -&gt; Separador utilizado (ex: "," ou ";")&#13;
// 🔁 Retorno:&#13;
//    array of array of string -&gt; Cada item representa uma linha com colunas separadas&#13;
&#13;
PROCEDURE ReadCSVFile(sFilePath is string, sSeparator is string = ",")&#13;
&#13;
arrResult is array of array of string&#13;
sLine is string&#13;
arrColumns is array of string&#13;
&#13;
IF NOT fFileExist(sFilePath) THEN&#13;
   Error("Arquivo CSV não encontrado: " + sFilePath)&#13;
   RESULT arrResult&#13;
END&#13;
&#13;
// Abre o arquivo para leitura&#13;
csvFileID is int = fOpen(sFilePath, foRead)&#13;
&#13;
IF csvFileID = -1 THEN&#13;
   Error("Erro ao abrir o arquivo CSV.")&#13;
   RESULT arrResult&#13;
END&#13;
&#13;
LOOP&#13;
   sLine = fReadLine(csvFileID)&#13;
   IF sLine = EOT THEN BREAK&#13;
&#13;
   // Divide a linha em colunas&#13;
   arrColumns = StringSplit(sLine, sSeparator)&#13;
   ArrayAdd(arrResult, arrColumns)&#13;
&#13;
END&#13;
&#13;
fClose(csvFileID)&#13;
&#13;
RESULT arrResult&#13;
&#13;
&#13;
⸻&#13;
&#13;
✅ Exemplo de uso:&#13;
&#13;
arrCSV is array of array of string&#13;
&#13;
arrCSV = ReadCSVFile("C:\dados\clientes.csv", ";")&#13;
&#13;
FOR EACH ROW arrCSV&#13;
   Trace("Nome: " + arrCSV[ROW][1] + " | Email: " + arrCSV[ROW][2])&#13;
END&#13;
&#13;
&#13;
⸻&#13;
&#13;
📌 Observações:&#13;
	•	Se o CSV tiver cabeçalho, você pode ignorar a primeira linha com um bFirstLine is boolean = True dentro do LOOP.&#13;
	•	Para lidar com aspas duplas, quebra de linha em colunas, UTF-8, e outros casos especiais, posso criar uma versão avançada com parsing completo. Deseja isso também?&#13;
&#13;
--&#13;
Adriano José Boller&#13;
______________________________________________&#13;
Consultor e Representante Oficial da&#13;
PcSoft no Brasil&#13;
+55 (41) 99949 1800&#13;
adrianoboller@gmail.com&#13;
skype: adrianoboller&#13;
http://wxinformatica.com.br/</description><ttl>30</ttl><generator>WEBDEV</generator><language>pt_BR</language><link>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5159-exemplo-procedure-para-ler-csv/read.awp</link><title>Exemplo de procedure para ler csv</title><managingEditor>moderateur@pcsoft.fr (The moderator)</managingEditor><webMaster>webmaster@pcsoft.fr (The webmaster)</webMaster></channel></rss>
