![Текстовые редакторы Linux, способные работать с очень-очень длинными строками и записями фиксированной длины](https://rvso.com/image/1414641/%D0%A2%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B5%20%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D1%8B%20Linux%2C%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BD%D1%8B%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C%20%D1%81%20%D0%BE%D1%87%D0%B5%D0%BD%D1%8C-%D0%BE%D1%87%D0%B5%D0%BD%D1%8C%20%D0%B4%D0%BB%D0%B8%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%D0%BC%D0%B8%20%D0%B8%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8F%D0%BC%D0%B8%20%D1%84%D0%B8%D0%BA%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B9%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%8B%20.png)
У меня тут довольно простая проблема: у меня есть фрагмент текста, представляющий собой одну гигантскую строку (~150 000 символов). Никаких переносов строк, и это плоский файл фиксированной длины (т. е. он был создан программой COBOL
), поэтому введение переносов строк не только неудобно, но и активно бесполезно, если я пытаюсь внести изменения в файл.
Большинство текстовых редакторов испытывают трудности с обработкой даже одной строки такого размера ( less
не нравится, Gedit
не нравится, nano
не нравится, я слышал, vim
что не нравится и т. д.), хотя они и работают.
Есть ли у кого-нибудь предложения по редактору, который лучше подойдет для данных, с которыми я работаю? Это всего лишь одна строка, но она все равно вызывает больше проблем, чем текстовый файл размером 1GiB+ со строками нормальной длины...
Было бы еще лучше, если бы он работал с EBCDIC
нулевыми байтами, а не блевал, когда сталкивался с ними, или искажал их при обратной записи (некоторые поля представляют собой двоично-десятичные числа).
Обратите внимание, что речь идет не о файлах, которые имеют большой размер (файл содержит только одну строку), а о том, что большинство редакторов не оптимизированы для работы с очень длинными строками.
решение1
Я думаю, что файл, подобный описанному вами, с практической точки зрения действует как двоичный файл, и с ним следует обращаться соответствующим образом.
Вы можете атаковать его с помощью шестнадцатеричного редактора, но это не поможет вам с частью EBCIDC.
Если вам предстоит много редактировать этот файл и вы хорошо знакомы с его форматом записи фиксированной длины, возможно, стоит потратить время и написать что-нибудь на Perl или другом языке (я предлагаю Perl, потому что он старый и, скорее всего, имеет модули, преобразующие UTF-8 и т. д. в EBCIDC), что будет работать с конкретным форматом этого файла.
решение2
я вообще-тотолько что попробовалvim на файле с одной строкой из 150000 символов, и все прошло гладко, как по маслу.
Так что, я думаю, вам действительно стоит попробовать, если вы этого еще не сделали, просто потому что you heard vim doesn't like such kind of files
...
Вот как я получил свой файл:
seq 150000 | while read num; do echo -n "b" ; done > megaline.txt
решение3
Я попробовал тот же метод, что и Dakatine, с моей установкой emacs, и он отлично сработал. Никаких зависаний, ничего. Если вы редактируете простой текст (т. е. не делаете никакого анализа, который требуется режимом для языка программирования, в text-mode
), будет очень, очень сложно заблокировать emacs. Поведение, которое вы видите с Eclipse, вероятно, является отражением того факта, что Eclipse пытается выполнить какой-то анализ текста при его рендеринге — то же самое и с Gedit. Я также не могу воспроизвести вашу проблему less
— у меня все отлично получается.
решение4
Попробуйте:JEdit — редактор для программистов
Он имеет некоторые расширенные функции буферизации и высокооптимизированный ввод-вывод, но требует некоторого времени для запуска (из-за JVM). Я использовал его для просмотра и редактирования файлов размером более 1GiB без каких-либо проблем - по крайней мере, на Debian. Я не могу гарантировать, что он будет вести себя так же хорошо на Windows... :)