0

質問を編集:

これで、タブ区切りからパイプ区切りに変更できます。しかし、データにはテキストの後にスペースがあります。スペースをトリムするためにバットにコードを追加する方法は?

元の質問:

タブ区切りで区切られたテキストファイルをパイプ区切りに変更する夜間バッチプロセスを作成したいと考えています。また、データのテキストの後にスペースがある場合。スペースをトリミングするには?

前 :

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
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 に答える
2

Windows のようにバッチを意味すると仮定すると、おそらく最も簡単な方法は、GnuWin32 パッケージ ページに移動して、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
于 2012-06-10T05:36:40.827 に答える
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);
 ?>  
于 2012-06-10T05:35:53.787 に答える