Вопрос

У меня очень большой текстовый файл, и моя программа iPad должна иногда заменить одну строку данных (новая линия: ' n'). Как я могу сделать это эффективно? Написание всего файла одновременно не вариант.

Я искал NSFilehandle, и похоже, что это сделает то, что я хочу; Прямо сейчас у меня проблемы с выяснением того, как найти строку X, а затем заменить его с помощью данных из строки. Я думаю, что после того, как это сделано, все, что мне нужно сделать, это позвонить Синхронизировать подпрофильную, верно?

Я ценю вашу помощь!

Это было полезно?

Решение

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

Если вам действительно нужно сделать это, и у него работают о каждом случае, если вы должны использовать эти шаги:

  1. Прочитайте весь файл, чтобы узнать смещение линии, которую вы заинтересованы
  2. Стремиться к смещению линии
  3. Написать новую строку
  4. Запишите остальную часть файла, который вы прочитали на шаге 1.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top