我正在尝试将许多文本文件转换为xls文件。 txt文件的样式如下:
"Name";"Login";"Role"
"Max Muster";"Bla102";"user"
"Heidi Held";"Held100";"admin"
我尝试使用此bash脚本:
for file in *.txt; do
tr ";" "," < "$file" | paste -d, <(seq 1 $(wc < "$file")) - > "${file%.*}.xls"
soffice --headless --convert-to xls:"MS Excel 95" filename.xls "${file%.*}.xls"
done
有了这个,我丢了标题行,还得到了一个带有许多中文符号的列,但其余的看起来还不错:
攀挀琀 | Max Muster | Bla102 | user
氀愀猀 | Heidi Held | Held100 | admin
如何摆脱这些中文标志并保留标题行?
答案 0 :(得分:0)
不幸的是,这个问题没有提供足够的细节来确保确切的问题是什么;但我们在评论中至少确定了以下内容。
const char* objDim = "The object dimension is: ";
int objDimension = geo->Dimension();
std::string objDimStr = std::to_string(objDimension);
objDim += objDimStr.c_str();
attempted to read the file as UTF-16是产生基本随机的中文字符的地方。 (字符可以是任何字符;更有可能是随机的Unicode BMP字符位于中文/日语块中。)有了这些观察和对现有脚本的重构,尝试
soffice
Awk脚本用很多单词将分号(for file in *.txt; do
awk -F ';' 'BEGIN { OFS="," }
FNR==1 {
# Add UTF-8 BOM
printf "\357\273\277"
# Generate header line for soffice to discard
for (i=1; i<=NF; i++) printf "bogus%s", (i==NF ? "\n" : OFS)
}
{ sub(/\015/, ""); print FNR, $0 }' "$file" > "${file%.*}.xls"
soffice --headless --convert-to xls:"MS Excel 95" filename.xls "${file%.*}.xls"
done
)上的每个输入行分割开,并将输出字段分隔符-F ';'
设置为逗号。在第一条输出行上,我们添加一个BOM和OFS
的综合标头行以在实际输出之前丢弃,以便标头行在输出中看起来像常规数据行。 soffice
负责删除所有DOS回车符,变量sub
是当前输入行的行号。
我不确定BOM表或虚假标题行是否严格必要,或者不确定是否需要传递一些其他选项以使FNR
将该输入视为正确的UTF-8。也许您还需要在管道中的某个位置包含soffice
。