OriginalGriff
Текстовые файлы не имеют "строк", они просто имеют "позиции символов", и даже они могут варьироваться в зависимости от типа "символов", которые вы храните / кодируете в них. Символы ASCII в текстовом файле ASCII будут иметь восемь битов - один байт в ширину, но символы Unicode могут иметь восемь или шестнадцать (или даже 32!) бит в ширину - и восьмибитная версия может "расширить" символ, чтобы занять два байта.
Предполагая, что вы используете ASCII для удобства кодирования и обсуждения, если вы не применяете какой - то "формат" к своему файлу для установления строк, вы не можете работать с такими различиями, особенно если ваши "столбцы" в каждой строке не имеют фиксированной длины-добавление маркера "конец строки", такого как новая строка, само по себе не помогает, поскольку изменения в строке могут потребовать перемещения местоположения этой новой строки, и это влияет на все строки позже в файле, которые автоматически не перемещаются, чтобы "совпасть" с новой позицией новой строки.
Поэтому, если вы устанавливаете фиксированную ширину столбцов, давая вам фиксированную длину строк, вы можете использовать seek
чтобы расположиться в начале ряда n
стремясь n * rowLength
, и к началу столбца m в строке n, стремясь к n * rowLength + column0Length + column1Length + ... + columnMMinusOneLength
Но... вы будете нести ответственность за то, чтобы размеры столбцов не были превышены, ничто другое не сделает этого за вас, и вы вызовете некоторые ужасные ошибки, если вы сделаете это неправильно. А вставка или удаление строки будет включать копирование всего файла до определенной точки, затем добавление строки или пропуск строки, затем копирование остальной части файла, затем удаление оригинала и переименование нового. Это будет медленная и раздражающая процедура, если вы не будете действительно осторожны.