编辑问题:
现在,我可以从tab更改为pipe分隔。但是数据在文本之后有空格。如何在bat中添加代码以修剪空间?
原始问题:
我想创建每晚批处理过程来更改文本文件,该文件由分隔符分隔到管道分隔。 如果数据在文本后有空格。如何修剪空间?
之前:
FileName:Customer_Tab.pwf - >那是文本文件
按标签分隔的数据分隔:
Customer Number Customer Name Partner Number Partner Name Customer Country
1ABC Jame 1234 Anny USA
2DEF Susan 5678 Prissy UK
转换为按管道分隔
分隔的数据FileName:Customer_Pipe.csv
数据:
Customer Number|Customer Name|Partner Number|Partner Name|Customer Country
1ABC|Jame|1234|Anny|USA
2DEF|Susan|5678|Prissy|UK
请帮我创建批处理。
我不知道如何为这个问题创建批处理。 非常感谢提前。
答案 0 :(得分:3)
批处理是修改文本文件的不良选择。获得强大的解决方案过于复杂,而且速度很慢。但它可以做到。
@echo off
setlocal disableDelayedExpansion
set input="Customer_Tab.pwf"
set output="Customer_Pipe.csv"
::There should be a TAB character after the equal below
set "tab= "
>%output% (
for /f "delims=" %%A in ('findstr /rn "^" %input%') do (
set ln=%%A
setlocal enableDelayedExpansion
set "ln=!ln:*:=!"
if defined ln set "ln=!ln:%tab%=|!"
echo(!ln!
endlocal
)
)
该解决方案将同时读取Unix(<LF>
)和Windows样式(<CR><LF>
)行。输出将是Windows样式行。
对上述内容的唯一限制是每行必须<&lt; ~8k长。
tab
变量不是必需的。我用它来使代码更加明显。
答案 1 :(得分:2)
setlocal enabledelayedexpansion
del Customer_Pipe.csv
for /f "delims=" %%i in (Customer_Tab.pwf) do (
set line=%%i
>> Customer_Pipe.csv echo !line: =^|!
)
在最后一行!line:
之后有一个制表字符
答案 2 :(得分:1)
假设您的意思是Windows中的批处理,最简单的方法是转到GnuWin32 packages page并获取sed
的副本。
然后,您只需使用管道符号替换选项卡,例如:
sed "s/\t/|/g" inputfile >outputfile
或者,如果你不介意用一点C编码弄脏你的手:
#include <stdio.h>
int main (void) {
int ch;
while ((ch = fgetc (stdin)) != EOF)
putchar ((ch == '\t') ? '|' : ch);
return 0;
}
将该程序tab2pipe.c
编译到可执行文件tab2pipe
中将允许您将其运行为:
tab2pipe <inputfile >outputfile
答案 3 :(得分:0)
我不知道如何通过批处理文件执行此操作,但如果您在系统上安装了php,则只需从批处理文件中调用一个小的PHP脚本,如下所示:
[convert.batch]
php -f covert.php
[convert.php]
<?php
// read entire file into an array
$rows = file('Customer_Tab.pwf');
// create output file
$fp = fopen('Customer_Pipe.csv', 'w');
foreach($rows as $row) {
// replace tabs with pipes
$data = str_replace("\t", "|", $row);
// write formatted row to output file
fwrite($fp, $data);
}
fclose($fp);
?>
答案 4 :(得分:0)
在记事本中打开制表符分隔的文件
在每行的开头和结尾删除引号("
)(如果有的话)。再加上最顶部的任何单词,在您可能认为列标题之上的位置...稍后再次打开文件时,它们都会抛弃列标题识别
在“标点符号视图” 中打开 Microsoft Word (通过单击顶部工具栏上看起来像音乐符号的那种笨拙的东西)
在Word中,键入“制表符”空格,您将看到一个指向右侧的箭头。将其复制到剪贴板
在记事本中,选择 edit-> replace 并将标签标记粘贴到“ find what”字段中,然后将管道符号放置在“ replace with”字段中,然后选择“ replace all”
工作完成。
将文件另存为*.txt
,但在文件名前加上单词pipe
,这样您就知道文件夹中的文件是哪一个。在 Excel 中以*.txt
文件的形式打开它,并使用管道作为'other'中的分隔符,然后取消选中选项卡复选框。