乱码可能是导出时编码格式所致,用记事本或notepad++打开显示正常。
另外,让Claude 3.5 Sonnet写了导入的功能,不过用的是aardio内置的listview。接下来试试让Claude 3.5 Sonnet 学习下 卢大师的虚表。
import win.ui;
import fsys.dlg;
/*DSG{{*/
var winform = win.form(text="CSV 文件读取与导出示例";right=759;bottom=469)
winform.add(
btnLoad={cls="button";text="加载 CSV 文件";left=10;top=10;right=120;bottom=40;z=1};
btnExport={cls="button";text="导出 CSV 文件";left=130;top=10;right=240;bottom=40;z=3};
listview={cls="listview";left=10;top=50;right=750;bottom=460;edge=1;fullRow=1;gridLines=1;z=2}
)
/*}}*/
// 简单的 CSV 解析函数
function parseCsv(str) {
var lines = string.split(str, '\n');
var result = {};
for(i=1; #lines; 1) {
var line = string.trim(lines[i]);
if(#line > 0) {
var fields = string.split(line, ',');
for(j=1; #fields; 1) {
fields[j] = string.trim(fields[j]);
}
table.push(result, fields);
}
}
return result;
}
// CSV 导出函数
function exportToCsv(data) {
var lines = {};
for(i=1; #data; 1) {
var line = {};
for(j=1; #data[i]; 1) {
// 如果字段包含逗号、引号或换行符,将其用引号括起来
if(string.find(data[i][j], '[,"\r\n]')) {
table.push(line, '"' + string.replace(data[i][j], '"', '""') + '"');
} else {
table.push(line, data[i][j]);
}
}
table.push(lines, string.join(line, ','));
}
return string.join(lines, '\r\n');
}
// 加载 CSV 文件
winform.btnLoad.oncommand = function(id,event){
var filepath = fsys.dlg.open("CSV 文件|*.csv|所有文件|*.*||", "选择 CSV 文件");
if(!filepath) return;
var content = string.load(filepath);
if(!content) {
win.msgbox("无法读取文件内容", "错误");
return;
}
var csv = parseCsv(content);
if(#csv < 1) {
win.msgbox("CSV 文件为空或格式不正确", "错误");
return;
}
winform.listview.clear();
//winform.listview.clearColumn();
for(i=1; #csv[1]; 1){
winform.listview.insertColumn(csv[1][i], 100);
}
for(i=2; #csv; 1){
winform.listview.addItem(csv[i]);
}
// for(i=1; #csv[1]; 1){
// winform.listview.setColumnWidth(i, -2);
// }
}
// 导出 CSV 文件
winform.btnExport.oncommand = function(id,event){
var data = {};
// 获取列标题
var columns = {};
var columnCount = winform.listview.columnCount;
if(columnCount == 0) {
win.msgbox("listview 中没有数据可以导出", "错误");
return;
}
for(i=1; columnCount; 1) {
var columnInfo = winform.listview.getColumn(i);
if(columnInfo) {
table.push(columns, columnInfo.text);
}
}
table.push(data, columns);
// 获取所有行数据
var itemCount = winform.listview.count;
for(i=1; itemCount; 1) {
var row = {};
for(j=1; columnCount; 1) {
table.push(row, winform.listview.getItemText(i, j));
}
table.push(data, row);
}
// 导出为 CSV
var csvContent = exportToCsv(data);
// 保存文件
var filepath = fsys.dlg.save("CSV 文件|*.csv|所有文件|*.*||", "保存 CSV 文件", "*.csv");
if(filepath) {
string.save(filepath, csvContent);
win.msgbox("文件已成功导出", "成功");
}
}
winform.show();
win.loopMessage();