Пакет: изменить разделитель табуляции на разделитель вертикальной черты

Изменить вопрос:

Теперь я могу перейти с табуляции на разделители. Но в данных есть пробел после текста. Как добавить код в 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

Пожалуйста, помогите мне создать пакет.

Я не знаю, как создать пакет для этого вопроса. Спасибо заранее.


person user1446972    schedule 10.06.2012    source источник


Ответы (5)


Пакетная обработка — плохой выбор для изменения текстовых файлов. Получить надежное решение слишком сложно, и это медленно. Но это может быть сделано.

@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 не нужна. Я использовал его, чтобы сделать более очевидным, что делает код.

person dbenham    schedule 10.06.2012


setlocal enabledelayedexpansion
del Customer_Pipe.csv
for /f "delims=" %%i in (Customer_Tab.pwf) do (
    set line=%%i
    >> Customer_Pipe.csv echo !line:    =^|!
)

После !line: в последней строке есть символ табуляции.

person panda-34    schedule 10.06.2012
comment
Я пытался запустить этот пакет, но выходные данные не меняются с разделителей табуляции на разделители конвейера. что я должен делать. Потому что я любитель делать в пакетном режиме и программировании. Т-Т - person user1446972; 10.06.2012
comment
После !line: в последней строке есть символ табуляции ?? после !строки: --› я использую табуляцию в пакетном файле, но результат такой же, как и в исходном файле. Они не меняются от вкладки к каналу. пожалуйста посоветуй. - person user1446972; 10.06.2012
comment
Загрузите исходный файл и файл bat, который вы пытаетесь выполнить. - person panda-34; 10.06.2012
comment
я не могу загрузить исходный файл, потому что... новым пользователям не разрешено публиковать изображения. Заработайте более 10 репутации, чтобы публиковать изображения. - person user1446972; 10.06.2012
comment
Этот bat не будет работать, если ваш исходный файл или файл bat не содержат символа табуляции. Публикация здесь не помогает, потому что вкладки не сохраняются. - person panda-34; 10.06.2012
comment
Да Да Да Да!!!!!!!!!!! Я попытался снова использовать вкладку. сейчас все хорошо. Большое спасибо снова и снова. Спасибо за вашу доброту. - person user1446972; 10.06.2012
comment
И немного побеспокоить. если в данных есть место после таких данных, как 123, как обрезать эти данные? - person user1446972; 10.06.2012
comment
Это решение испортит все строки, содержащие символы !. Это также удалит пустые строки. Это может быть или не быть проблемой, в зависимости от ввода. - person dbenham; 10.06.2012

Я не уверен, как это сделать с помощью пакетного файла, но если в вашей системе установлен 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);
 ?>  
person Cyclonecode    schedule 10.06.2012
comment
Спасибо всем вам за ваш вид. Но я до сих пор не конвертирую из разделителя табуляции в разделитель канала. Потому что я любитель пакетной обработки и кодирования. я все еще жду вашей помощи. Т_Т - person user1446972; 10.06.2012

Откройте файл с разделителями табуляции в Блокноте

Удалите кавычки (") в начале и в конце каждой строки, если они есть. Плюс любое отдельное слово в самом верху, над тем, что вы могли бы считать заголовками столбцов... они оба будут сбрасывать распознавание заголовка столбца при повторном открытии файла позже

Откройте Microsoft Word в 'представлении пунктуации' (нажав на круглое пятно, похожее на музыкальный символ, на верхней панели инструментов).

В Word введите пробел, и вы увидите стрелку, указывающую вправо. скопировать его в буфер обмена

В Блокноте выберите редактировать->заменить и вставьте знак табуляции в поле «найти что», поместите символ вертикальной черты в поле «заменить на» и выберите «заменить все».

Работа выполнена. Сохраните файл как *.txt, но добавьте к нему префикс pipe, чтобы вы знали, какой файл находится в папке. Откройте его в Excel как файл *.txt, используя вертикальную черту в качестве разделителя в 'other' и сняв флажок на вкладке.

person Julian Pearson    schedule 06.11.2018