Я считаю, что возможность читать (и записывать) текстовый файл в массив строк и из него является довольно распространенным требованием. Это также очень полезно, когда вы начинаете с языка, избавляя от необходимости изначально обращаться к базе данных. Есть ли такой на Голанге?
например
func ReadLines(sFileName string, iMinLines int) ([]string, bool) {
и
func WriteLines(saBuff[]string, sFilename string) (bool) {
Я бы предпочел использовать существующий, а не дублировать.
Ответы:
Начиная с версии Go1.1, существует API bufio.Scanner, который может легко читать строки из файла. Рассмотрим следующий пример сверху, переписанный с помощью Scanner:
источник
Если файл не слишком велик, это может быть сделано с
ioutil.ReadFile
иstrings.Split
функции следующим образом:Вы можете прочитать документацию по пакетам ioutil и strings .
источник
"io/ioutil"
\r
. Таким образом, вы можете добавить\r
к каждому элементу.Невозможно обновить первый ответ.
В любом случае, после выпуска Go1 есть некоторые критические изменения, поэтому я обновил, как показано ниже:
источник
Вы можете использовать os.File (который реализует интерфейс io.Reader ) с bufio пакетом . Однако эти пакеты создаются с учетом фиксированного использования памяти (независимо от размера файла) и работают довольно быстро.
К сожалению, это немного усложняет чтение всего файла в память. Вы можете использовать bytes.Buffer для соединения частей строки, если они превышают лимит строки. В любом случае, я рекомендую вам попробовать использовать программу чтения строк прямо в вашем проекте (особенно, если вы не знаете, насколько велик текстовый файл!). Но если файл небольшой, вам может быть достаточно следующего примера:
Другой альтернативой может быть использование io.ioutil.ReadAll для одновременного чтения всего файла и последующего выполнения нарезки по строкам. Я не даю вам явного примера того, как записывать строки обратно в файл, но это в основном
os.Create()
ним следует цикл, аналогичный тому, что в примере (см.main()
).источник
gob.Encode()
для этого. В результате получается двоичный файл вместо текстового файла, разделенного новой строкой. Этот файл может содержать все виды данных, его можно эффективно анализировать, итоговый файл будет меньше, и вам не придется иметь дело с этими символами новой строки и динамическим размещением. Так что это, вероятно, лучше подходит для вас, если вы просто хотите сохранить что-то для последующего использования с Go.или
источник