0

编辑问题:

现在,我可以从制表符更改为管道分隔符。但是数据在文本之后有空格。如何在 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

转换为由管道分隔的数据

文件名:Customer_Pipe.csv

数据 :

Customer Number|Customer Name|Partner Number|Partner Name|Customer Country

1ABC|Jame|1234|Anny|USA

2DEF|Susan|5678|Prissy|UK

请帮我创建批处理。

我不知道如何为这个问题创建批处理。提前谢谢了。

4

5 回答 5

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 风格的线条。

对上述内容的唯一限制是每行的长度必须 < ~8k。

tab变量不是必需的。我用它来使代码的作用更加明显。

于 2012-06-10T13:19:56.947 回答
2

Assuming you mean batch as in Windows, the easiest way is to probably head on over to the GnuWin32 packages page and pick up a copy of sed.

Then you can simply replace tabs with pipe symbols with something like:

sed "s/\t/|/g" inputfile >outputfile

Or, if you don't mind getting your hands dirty with a little C coding:

#include <stdio.h>
int main (void) {
    int ch;
    while ((ch = fgetc (stdin)) != EOF)
        putchar ((ch == '\t') ? '|' : ch);
    return 0;
}

Compiling that program tab2pipe.c into the executable tab2pipe will allow you to run it as:

tab2pipe <inputfile >outputfile
于 2012-06-10T05:36:40.827 回答
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:最后一行后面有一个制表符

于 2012-06-10T08:18:40.487 回答
0

I'm not sure how to do this through a batch file, but if you have php installed on your system you could use simply call a small php script from your batch file like this:

 [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);
 ?>  
于 2012-06-10T05:35:53.787 回答
0

在记事本中打开制表符分隔文件

"删除每行开头和结尾的引号 ( )(如果有的话)。加上最顶部的任何单个单词,在您可能认为的列标题之上......稍后再次打开文件时,它们都会抛出列标题识别

“标点符号视图”中打开Microsoft Word(通过单击顶部工具栏上看起来像音乐符号的那个斑点)

在 Word 中,键入“制表符”空格,您将看到一个指向右侧的箭头。将其复制到剪贴板

在记事本中,选择编辑->替换并将标签标记粘贴到“查找内容”字段中,并将管道符号放在“替换为”字段中,然后选择“全部替换”

任务完成。将文件另存为,*.txt但在其前面加上单词前缀,pipe以便您知道它在文件夹中是哪一个。在Excel中将其作为*.txt文件打开,使用管道作为“其他”中的分隔符并取消选中选项卡复选框。

于 2018-11-06T09:21:48.027 回答