Использование одного текстового файла в качестве измененного «трафарета» для других текстовых файлов с формами

230
einpoklum

(перефразируя вопрос для большей ясности.)

Предположим, у меня есть 1000 текстовых файлов. Каждый файл представляет собой текстовую форму с фиксированными описаниями полей и заголовками, но данные отличаются. Например, файл 1:

The Foo Factory Date: 2015-10-02  Order Details ------------------------- Order ID: [ 1 ] Amount: [ 1 ] Order Price: [ 12.34 ]  Have a nice day. 

и файл 2:

The Foo Factory Date: 2016-01-11  Order Details ------------------------- Order ID: [ 7 ] Amount: [ 17 ] Order Price: [ 543.21 ]  Have a nice day. 

и т.д. Теперь, предположим, я перешел и перевел описания полей на французский язык; и я удалил значения. Итак, теперь у меня есть:

L'usine Foo Date:   Détails de commande ------------------------- Nm.du Commande: [ ] Montant: [ ] Prix du Commande: [ ]  Bonne journée. 

Я на самом деле не говорю по-французски, поэтому игнорирую любые ошибки здесь. В любом случае, позиции всех полей одинаковы, но текст, не содержащий значения поля, отличается. Я хочу применить эту замену ко всем файлам. Как мне этого добиться?

0
Какова ваша конечная цель? user193661 8 лет назад 1
@Clearquestionwithexamples: изменение описаний полей для текстового «вывода формы»; и со временем у меня будет много таких. Кроме того, ваш ник довольно запутанный. Я не хочу быть грубым, но - возможно, вам стоит подумать об этом. einpoklum 8 лет назад 0
Можете ли вы предоставить скриншот до и после или использовать блок кода для примера? user193661 8 лет назад 0
Вы "заменили текст" шаблона "и удалили" специфичные для файла "данные", которые звучат так, будто файл теперь будет пустым. user193661 8 лет назад 0
Вы знаете о регулярных выражениях? user193661 8 лет назад 0
@Clearquestionwithexamples: Да, но регулярное выражение не применяется к парам файлов / потоков. Также смотрите мои изменения относительно вашего предыдущего комментария. einpoklum 8 лет назад 0
Я сомневаюсь, что кто-нибудь поймет ваш вопрос. Просто предоставьте информацию о вашей ситуации и пример операции, которую вы хотите выполнить. user193661 8 лет назад 0
@Clearquestionwithexamples: Как насчет сейчас? einpoklum 8 лет назад 0
Это легко понять сейчас. Моим инструментом goto для такого рода вещей является Python. user193661 8 лет назад 0
Хотите сценарий для этого? Я уже начал писать это. user193661 8 лет назад 0
@Clearquestionwithexamples: я действительно предполагал, что есть какой-то инструмент, который делает это. Очевидно, что-то вроде Perl-скрипта, читающего из двух файлов, может сделать это. Кроме того, команда, которая чередует символы из двух файлов, почти позволила бы сделать это с помощью одного простого регулярного выражения (но для факта, что описания новых полей иногда содержат пробелы). einpoklum 8 лет назад 0
@Clearquestionwithexamples: Да, есть. Плюс, это все равно лучше :-) einpoklum 8 лет назад 0
Какая ОС? user193661 8 лет назад 0
Я имел в виду _Winmerge_ делает это. user193661 8 лет назад 0
@Clearquestionwithexamples: Давай, "что такое ОС"? Я немного обиделся ... я звучу как парень Windows для вас? :-) einpoklum 8 лет назад 0

1 ответ на вопрос

0
user193661

Вы уже сгенерировали карту форматирования, поэтому единственной оставшейся работой является замена регулярных выражений. Создать карту сложнее, особенно для более крупного и сложного текста. Я использую Sublime Text для этого. Но случай использования и дополнительная информация здесь неясны, вы должны отнести их к softwarerecs.SE, если это важно. В любом случае я включаю версию Python:

 

# -*- coding: utf-8 -*- import os  SOURCE_DIRECTORY = '' DEST_DIRECTORY = ''  replacements = ["L'usine Foo ", "Détails de commande", "Nm.du Commande: ", "Montant: ", "Prix du Commande: ", "Bonne journée."]  samples = ["The Foo Factory ", "Order Details", "Order ID: ", "Amount: ", "Order Price: ", "Have a nice day."]  for filename in os.listdir(SOURCE_DIRECTORY): with open(os.path.join(SOURCE_DIRECTORY, filename), 'r') as nctn: text = nctn.read() for i, val in enumerate(samples): text = text.replace(val, replacements[i]) with open(os.path.join(DEST_DIRECTORY, filename), 'w') as nctn: nctn.write(text) 
Я имею в виду, что если у вас очень большой файл, сам процесс определения того, какие операции необходимо выполнить, будет трудоемким. Подумайте, вручную выбирая тысячу строк ключевых слов для создания вашего сопоставления. user193661 8 лет назад 0
О, нет, нет, я не хочу писать собственный скрипт, содержащий шаблон. Мне нужно что-то, что берет любую (новый файл шаблона, рабочий файл) пару и делает свою работу. einpoklum 8 лет назад 0