Есть ли ограничение длины строки для текстовых файлов, созданных из Perl? - PullRequest
7 голосов
/ 19 сентября 2009

При написании скрипта на Perl я получил требование записывать имена пользователей с разделением запятыми только в одну строку файла.

Вот почему я хотел бы знать, есть ли ограничение на максимальный размер строки в файле .txt.

Ответы [ 7 ]

14 голосов
/ 19 сентября 2009

Текстовые файлы похожи на любые другие файлы, а символ новой строки похож на любой другой символ, поэтому применяются только обычные ограничения на размер файла (ограничение размера 4 ГБ в старых файловых системах, файл должен помещаться на диске и т. Д.)

Вы не столкнетесь с какими-либо проблемами при чтении и записи, если только вы не читаете это построчно - тогда вы можете исчерпать память или столкнуться с переполнением буфера. Это может произойти в любом текстовом редакторе или программе обработки текста (например, sed или awk), потому что, в отличие от ядра ОС, в этих разделителях строк

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

4 голосов
/ 20 сентября 2009

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

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

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

 $/ = ',';

 while( <DATA> )
    {
    chomp;
    print "Line is: $_\n";
    }

 __DATA__
 a,b,c,d,e,f,g

Несмотря на то, что у меня есть одна строка под __DATA__, это только потому, что мы привыкли к книгам. Компьютеры не читают книги. Вместо этого эта программа думает, что все между запятыми - это строка:

Line is: a
Line is: b
Line is: c
Line is: d
Line is: e
Line is: f
Line is: g
3 голосов
/ 19 сентября 2009

Нет, такого ограничения нет, пока вы не достигнете каких-либо ограничений размера файла.

3 голосов
/ 19 сентября 2009

Нет ограничений по размеру, кроме вашей файловой системы, которая, скорее всего, составляет 2 ТБ или что-то еще.

2 голосов
/ 16 октября 2011

Я только что натолкнулся на такую ​​проблему со строкой длиной около 1М в Kwrite.

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

1 голос
/ 19 сентября 2009

В некоторых старых системах Unix некоторые текстовые утилиты (например, join, sort и даже некоторые старые awk) имеют ограничение на максимальный размер строки. Я думаю, что это предел утилит, но не ОС. Насколько мне известно, утилиты GNU не имеют такого ограничения, и поэтому в Linux никогда не было этой проблемы.

0 голосов
/ 19 сентября 2009

размер файла зависит от файловой системы вашей ОС. У инструментов нет предела для такого (или, по крайней мере, я еще никогда не видел ..)

...