批处理:将分隔符更改为管道分隔

时间:2012-06-10 05:18:41

标签: batch-file tab-delimited tab-delimited-text

编辑问题:

现在,我可以从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

请帮我创建批处理。

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

5 个答案:

答案 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'中的分隔符,然后取消选中选项卡复选框。