TabEditor/lib/teUtils.aardio

180 lines
4.0 KiB
Plaintext
Raw Normal View History

2024-06-16 18:49:26 +08:00
//teUtils 表格文件处理
namespace teUtils;
import io;
import fsys.dlg;
import fsys.codepage;
var currentFilePath = null;
setCurFilePath = function(path){
currentFilePath = path;
}
getCurFilePath = function(){
return currentFilePath;
}
generateColFields = function(limit){
var combinations = {};
letters = {};
count = 0;
for(i=65;90;1){
if(count >= limit){
break;
}
..table.push(combinations, ..string.pack(i))
..table.push(letters, ..string.pack(i))
count += 1;
}
for(_,letter1 in letters){outer_loop:
for(_,letter2 in letters){
if(count >= limit){
break outer_loop;
}
..table.push(combinations, letter1 + letter2)
count += 1;
}
}
return combinations;
}
initFlexCellShow = function(fc){
var col_sum = 100;
var row_sum = 100;
var t = {};
t.fields = {};
t.fields = ..table.append(t.fields, generateColFields(col_sum));
for(i=1; row_sum; 1){
var row = {};
for (j=1; #t.fields; 1) {
row[t.fields[j]] = "";
}
..table.push(t, row);
}
fc.AutoRedraw = false;
fc.setTable(t, t.fields, t.fields);
fc.column(0).AutoFit();
fc.AutoRedraw = true;
fc.Refresh();
}
insertFlexCellNewRow = function(flexcell, start_row, add_row_count, colCount){
var t = {};
t.fields = {};
t.fields = ..table.append(t.fields, generateColFields(colCount));
for(i=1; add_row_count; 1){
var row = {};
for (j=1; #t.fields; 1) {
row[t.fields[j]] = "";
}
..table.push(t, row);
}
flexcell.insertRow(start_row/*插入行号*/, t/*插入行的数据表*/);
}
insertFlexCellNewCol = function(flexcell, start_col, add_col_count, colCount){
var new_fields = generateColFields(colCount + add_col_count);
flexcell.insertCol(start_col, add_col_count, new_fields);
}
getTxtTableData = function(reference_row = 2){
var fileName = ..fsys.dlg.open("txt file*.txt|*.txt|db file*.db|*.db|sqlite file(*.sqlite)|*.sqlite|","打开","./");
if(!fileName){
return;
}
setCurFilePath(fileName);
var str = ..fsys.codepage.load(fileName,"UTF-16LE")
var row_count = 0;
var col_count = 0;
for i in ..string.lines(str,'\r\n','\t'){
row_count += 1;
if(row_count == reference_row){
for(n=1;#i;1){
if(..string.trim(i[n]) == ""){
break;
}
col_count += 1;
}
}
}
var t = {};
t.fields = {};
t.fields = ..table.append(t.fields, generateColFields(col_count));
var temp_cur_line = 0;
for i in ..string.lines(str,'\r\n','\t', col_count){
var col_values = {};
var isEmptyLine = false;
2024-06-17 23:41:57 +08:00
2024-06-16 18:49:26 +08:00
temp_cur_line += 1;
2024-06-17 23:41:57 +08:00
2024-06-16 18:49:26 +08:00
for (j=1; col_count; 1) {
if(#i == 0){
isEmptyLine = true;
break;
}
if(i[j] == null){
i[j] = "";
}
if(j == col_count){//去除每一行末尾多余的\t
i[j] = ..string.replace(i[j], '\t',"");
}
col_values[t.fields[j]] = i[j];
}
if (!isEmptyLine) {
..table.push(t, col_values);
}
}
return t;
}
var writeTxtFile = function(file_path, vlist_data){
var file = ..io.open(file_path,"w");
for(i=1;#vlist_data;1){
var arrLine = {};
for(j=1;#vlist_data.fields;1){
..table.push(arrLine, vlist_data[i][vlist_data.fields[j]]);
}
str = ..string.join(arrLine, '\t', 1, #vlist_data.fields);
str = str ++ '\t';// 每行最后一列之后添加一个\t
if(i != #vlist_data){
file.write(str,'\n');
}
else {
file.write(str);
}
}
file.close();
var str2 = ..fsys.codepage.load(file_path,"UTF-8")
..fsys.codepage.save(file_path,str2,"UTF-16LE")
}
saveTxtTableData = function(vlist_data){
var curFilePath = getCurFilePath();
if(!curFilePath){
return;
}
writeTxtFile(curFilePath, vlist_data);
}
saveAsTxtTableData = function(vlist_data){
var newFilePath = ..fsys.dlg.saveOp("txt file*.txt|*.txt|db file*.db|*.db|sqlite file(*.sqlite)|*.sqlite|","保存","./");
if(!newFilePath){
return;
}
setCurFilePath(newFilePath);
writeTxtFile(newFilePath, vlist_data);
}