Программа для удаления специальных символов, не являющихся ascii, из больших tex-файлов.

У меня есть текстовые файлы размером более 100 МБ, и в них много специальных символов. Я не могу импортировать их в свою СУБД, потому что PostgreSql не распознает эти символы. Как я могу удалить их? Какой софт это делает?

В настоящее время я использую EmEditor, но мне нужно найти специальные символы вручную и заменить все. Их тонны. Более 10к. Я на Windows.

У вас есть доступ к Linux-машине? Это будет одна командная строка в Linux, если вы можете загрузить ее, например, с Live CD.

Ответы (2)

Очень простой скрипт Python или даже интерактивный сеанс терминала/командной строки может читать из входного файла и записывать в выходной файл при изменении кодировки на ASCII — у вас будет выбор, что делать с несоответствующими символами :

  • игнорировать пропускать символы ascii
  • заменить на?
  • вывод xmlcharrefreplace в формате, подобномꀀ
  • обратная косая черта заменяет вывод в формате, подобном\\ua000
  • вывод namereplace в формате, подобном тому, \\N{YI SYLLABLE IT}где доступны имена.

Код в Python 3 будет чем-то вроде непроверенного :

with open('somefilename') as infile: # You may need to add 'rb' to the open command
   with open('outname', 'wt') as outfile:  # You may need to use 'wb' here
      outfile.write(infile.read().encode('ascii', 'backslashreplace'))

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

Подробнее см. https://docs.python.org/3/howto/unicode.html .

Python является бесплатным, бесплатным и открытым исходным кодом и доступен практически для каждой платформы, он предустановлен на большинстве платформ, отличных от Windows .

Установите редактор CudaText .

  • Вызываем пункт меню "Плагины - Сделать плагин"
  • Введите имя плагина «MyRemove» и введите текст нового плагина ниже.
  • Сохраните, перезапустите CudaText, появится новый плагин "Плагины - MyRemove".
  • Откройте файл с не-ASCII
  • Запустить плагин
  • Сохранить файл как...

Текст плагина:

from cudatext import *

class Command:
    def run(self):
        s=ed.get_text_all()
        for i in range(32):
            if not i in [10,13,9]:
                s=s.replace(chr(i), '')
        ed.set_text_all(s)