У меня есть запись, как показано ниже в моем входном файле (input.txt):

mcolWarrant|||||||||        0||Forwarded||
mcolWarrant|||||||||        0||Forwarded||
mcolWarrant|||||||||        0||Forwarded||
mcolWarrant|AW000015|||||0A009919|388|MILTON KEYNES|     7000||

Я просто хочу удалить пробные пробелы перед "0" ( 0) и перед "7000"( 7000) . Как я могу сделать это с помощью пакетных сценариев?

1 ответ1

0

Ваш вопрос очень неточный, поэтому мой ответ предполагает следующее:

  • Вы используете Windows
  • Каждая строка вашего файла содержит столбцы, разделенные |
  • Вы хотите удалить начальные пробелы из всех столбцов
  • Вы хотите использовать пакетный скрипт Windows

Изменение файлов с использованием чистого пакетного скриптинга может быть очень сложным. Часто бывают простые "решения", которые терпят неудачу при столкновении с общими ситуациями. Практически всегда есть обходные пути, но получаемый пакетный отрывок часто становится сложным и медленным.

Но есть мощная гибридная утилита JScript/batch под названием REPL.BAT, которая может легко решить множество проблем обработки текста. REPL.BAT - это чистый скрипт, который будет работать на любом компьютере с Windows начиная с XP. Он выполняет регулярное выражение find/replace в stdin и записывает результат в stdout. Он очень прост в использовании, если вы изучаете регулярные выражения.

Один сложный аспект вашей проблемы заключается в том, что начальные пробелы в первом столбце не следуют за | разделитель. Надлежащее решение должно решить этот особый случай.

Следующие две команды выполнят вашу задачу

type input.txt | repl "(^|\|) *" "$1" >input.txt.new
move /y "input.txt.new" "input.txt" >nul

Простая модификация регулярного выражения позволит ему убирать как начальные, так и конечные пробелы из каждого столбца. Это решение должно обрабатывать особый случай, когда завершающие пробелы не предшествуют | разделитель в последнем столбце.

type input.txt | repl "(^|\|) *| *($|\|)" "$1$2" >input.txt.new
move /y "input.txt.new" "input.txt" >nul

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .