Считывание строк из файла и запись в массив на C++

Чтение из файла

Чтение из файла

Добрый день! В этой статье я расскажу о том, как написать программу, которая будет считывать строки из файла. Покажу как записать их в массив или вывести. При написании программы будут использоваться функции из стандартной библиотеки языка C++.

Стандартная библиотека языка C++  <fstream> включает множество функций для работы с файлами. Описание функций можно найти в сети или в учебниках по C++. Здесь же я опишу одну, которая позволит произвести чтение строки из файла.

Для начала определимся с файлом, с которого будем считывать информацию. Я создал файл с именем «strings.txt» и записал в него информацию, которую буду считывать в массив и выводить на экран.

Содержание файла strings.txt

Три строки, содержащиеся в файле, я запишу массив и выведу на экран.

Пингвин читает содержимое файла

Пингвин читает содержимое файла

Переходим к написанию программы на C++.

Нашей программе понадобятся два заголовочных файла <iostream> и <fstream>. Первый нужен будет для использования вывода на консоль, второй для работы с файлами.

Объявим две целочисленные константы len и strings, они будут хранить максимальную длину наших строк и количество строк. Объявим символьную константу ch, которая будет хранить разделяющий символ. Первые две константы будут использоваться для объявления массива. Мой файл содержит 3 строки

При помощи значений двух первых констант объявим двумерный массив символов.

Создадим объект класса ostream, в конструктор поместим адрес файла, флаги открытия.

Флаг ios::in позволяет открыть файл для считывания, ios::binary открывает его в двоичном режиме.

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

В данный момент программа имеет такой вид

Теперь остается описать алгоритм считывания строк из файла и занесения их в массив с последующим выводом. Для этого понадобится цикл от нуля до strings с инкрементом переменной r. Во время каждого прохода цикла используем перегруженную функцию getline() объекта fs с тремя аргументами.

fs.getline(Массив_символов, Макс_длина_строки, Разделитель_строк)

Функция считывает символы из файла, пока не считает количество равное Макс_длина_строки, либо не встретит на своём пути символ равный Разделитель_строк, а после записывает считанные символы в Массив_символов. В качестве разделителя в моём текстовом файле используется перенос строки.

После сразу же выводим содержимое строки, хранящееся в массиве, при помощи поточного вывода в консоль cout.

Весь листинг конечной программы

Программа выводит строки и успешно завершается, возвращая 0.

За счет константных переменных её можно легко модернизировать. Изменив константу strings, можно указать количество выводимых строк. Чтение из файла будет производится до тех пор, пока массив не заполнится нужным количеством строк. Изменив константу ch, можно изменить разделитель строк(Например, можно разделять их пробелом и занести в массив отдельные слова из файла и т.д.).

Если Вас интересует запись в файл, то почитайте статью о чтении из input.txt и записи данных в файл output.txt.

Считывание строк из файла и запись в массив на C++: 10 комментариев

    1. Полякова

      С++ Чтение файла в массив F:\strings.txt или F:\\strings.txt?

  1. Tima

    Хороший пример, а если с Qt работать, то это удобнее и проще

  2. Алексей

    Здравствуйте! Подскажите, пожалуйста, как после вышеизложенного заполнения массива отдельно просуммировать значения в четных и нечетных строках?? Массив заполнен десятичными дробями. Одно число в одной строке.

    1. Николай Сергейчук Автор записи

      Здравствуйте, в вашем случае без массива можно обойтись, складывая значения строк сразу при считывании информации из файла. Так как данный способ в статье был для известно заданного количества строк в файле, то если мы заранее не знаем сколько строк в файле, программа просто непригодна. Такой вариант можно и нужно учесть.
      Ответил на Ваш вопрос целой статьей https://nicknixer.ru/otvety/najti-summu-znachenij-chisel-v-chetnyx-i-nechetnyx-strokax-fajla/

  3. Mikhail

    а с динамическим массивом можно как то сделать? Если я допустим не знаю максимальную длину строки?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *