1 / 1 / 0
Регистрация: 01.08.2017
Сообщений: 30
1

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

10.08.2017, 14:02. Показов 3056. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые форумчане!

Помогите пожалуйста в Qt осуществить считывание известного числа N сток из текстового файла и запись элементов, отделенных пробелами, каждой из них в отдельный одномерный массив.

Всем огромное спасибо за помощь!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2017, 14:02
Ответы с готовыми решениями:

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

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

Считывание строк из файла и запись в структуру
Есть некая структура и массив таких структур x. struct cyberforum { int a; char b; float c;...

Считывание строк с файла и запись в переменную
Приветствую у меня приключилась такая проблема : Как можно реализовать считывания строк с файла и...

22
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.08.2017, 14:52 2
Количество элементов в строках известно? Одинаково?
0
1 / 1 / 0
Регистрация: 01.08.2017
Сообщений: 30
10.08.2017, 14:58  [ТС] 3
nd2, известно, но не одинаково
0
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.08.2017, 15:01 4
Цитата Сообщение от Karya Посмотреть сообщение
известно, но не одинаково
Как это? Если известно, то где записано? С++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    vector < vector <int> > vv; // вектор с векторами элементов строк
   
    ifstream fin("file.txt");
    if (fin)
    {
        vector <int> temp; // под элементы одной строки
        int i;
        while (fin >> i)
        {
            temp.push_back(i);
            if (fin.peek() == '\n' || fin.peek() == EOF)
            {
                vv.push_back(temp);
                temp.clear();
            }
        }
        fin.close();
    }
    else
        cout << "Error opening file!" << endl;
1
1 / 1 / 0
Регистрация: 01.08.2017
Сообщений: 30
10.08.2017, 15:08  [ТС] 5
nd2, количество элементов в строках известно, количество элементов в разных строках не одинаково

пробовала считывать через ifstream, чтение не происходит
0
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.08.2017, 16:15 6
Цитата Сообщение от Karya Посмотреть сообщение
количество элементов в строках известно
Сколько где?

Добавлено через 37 секунд
Цитата Сообщение от Karya Посмотреть сообщение
чтение не происходит
Как это выглядит? Код какой?
0
1 / 1 / 0
Регистрация: 01.08.2017
Сообщений: 30
10.08.2017, 16:22  [ТС] 7
nd2, вот элементы построчно, записанные в текстовом файле

5
1.37175025 0.14328455 471 365
1.37243093 1.36814091 1.37042904 1.36557702 1.37352351
0.14314492 0.14220594 0.13816899 0.14075382 0.15039328
450 588 514 670 415
360 330 200 282 596

считывала вот так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int M;
  double alfa0, beta0, x0, y0;
  
  ifstream ishod("file1.txt");                 
  ishod >> M >> alfa0 >> beta0>> x0 >> y0;   
  double alfa[M];
  for(int i=0; i<M; ++i)
  {
    ishod >> alfa[i];   
  }
  
  double beta[M];
  for(int i=0; i<M; ++i)
  {
    ishod >> beta[i];   
  }
  
  double x[M];
  for(int i=0; i<M; ++i)
  {
    ishod >> x[i];  
  }
  
  double y[M];
  for(int i=0; i<M; ++i)
  {
    ishod >> y[i];  
  }
  
  ishod.close();
0
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.08.2017, 16:23 8
В файле:
1 1 1 1 1
2 2 2 2 2 2 2 2
3 3
4
5 5 5 5
Вот код (добавлен вывод для проверки правильности чтения):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int main()
{  
    vector < vector <int> > vv; // вектор с векторами элементов строк
   
    ifstream fin("file.txt");
    if (fin)
    {
        vector <int> temp; // под элементы одной строки
        int i;
        while (fin >> i)
        {
            temp.push_back(i);
            if (fin.peek() == '\n' || fin.peek() == EOF)
            {
                vv.push_back(temp);
                temp.clear();
            }
        }
        fin.close();
 
        for (int i = 0; i < vv.size(); ++i)
        {
            for (int j = 0; j < vv[i].size(); ++j)
                cout << vv[i][j] << ' ';
            cout << endl;
        }
    }
    else
        cout << "Error opening file!" << endl;
    
    system("pause");
    return 0;
}
Миниатюры
Считывание строк из файла и запись в массив  
1
1 / 1 / 0
Регистрация: 01.08.2017
Сообщений: 30
10.08.2017, 16:36  [ТС] 9
nd2, это в Qt? а какая у вас версия?
0
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.08.2017, 16:40 10
Под твой файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
int main()
{  
    vector < vector <double> > vv; // вектор с векторами элементов строк
   
    ifstream fin("file.txt");
    if (fin)
    {
        vector <double> temp; // под элементы одной строки
        int N;
        double n;
        fin >> N;
        for (int i = 0; i < N; ++i) 
        {
            while (fin >> n)
            {
                temp.push_back(n);
                if (fin.peek() == '\n' || fin.peek() == EOF)
                {
                    vv.push_back(temp);
                    temp.clear();
                }
            }
        }
        fin.close();
 
        for (int i = 0; i < vv.size(); ++i)
        {
            for (int j = 0; j < vv[i].size(); ++j)
                cout << vv[i][j] << ' ';
            cout << endl;
        }
    }
    else
        cout << "Error opening file!" << endl;
    
    system("pause");
    return 0;
}
Миниатюры
Считывание строк из файла и запись в массив  
1
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.08.2017, 16:45 11
Цитата Сообщение от Karya Посмотреть сообщение
это в Qt?
Имеешь ввиду, qtcreator?
0
1 / 1 / 0
Регистрация: 01.08.2017
Сообщений: 30
10.08.2017, 16:48  [ТС] 12
nd2, да
0
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.08.2017, 16:56 13
Цитата Сообщение от Karya Посмотреть сообщение
да
Среда здеь не важна. Не компилируется, или что?
В последний код, после 20 строки, добавить:
C++
1
break;
0
1 / 1 / 0
Регистрация: 01.08.2017
Сообщений: 30
11.08.2017, 10:50  [ТС] 14
nd2, да, при компиляции выдает ошибку
Миниатюры
Считывание строк из файла и запись в массив  
0
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
11.08.2017, 15:54 15
Лучший ответ Сообщение было отмечено nd2 как решение

Решение

Эта ошибка не к коду относится. Убери кириллицу из проекта.
0
1 / 1 / 0
Регистрация: 01.08.2017
Сообщений: 30
17.08.2017, 13:43  [ТС] 16
nd2, извиняюсь, не разобралась
но все-равно выдает много ошибок при компиляции
Миниатюры
Считывание строк из файла и запись в массив  
0
зомбяк
1581 / 1215 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
17.08.2017, 13:53 17
Karya, нужно добавить в начало
C++
1
2
#include <vector>
using std::vector;
1
1 / 1 / 0
Регистрация: 01.08.2017
Сообщений: 30
17.08.2017, 14:02  [ТС] 18
TRam_, спасибо
но теперь не может открыть файл, пробовала и полный путь указывать и в папку с проектом класть(
0
зомбяк
1581 / 1215 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
17.08.2017, 14:09 19
ещё забыл о
C++
1
#include <fstream>
Добавлено через 4 минуты
Если речь о QtCreator, то файл скорее всего нужно класть в ту папку, где makefile и прочее, а не непосредственно в папку debug с приложением. Потому что по-умолчанию именно она задаётся в качестве пути исполнения.
1
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.08.2017, 14:19 20
Цитата Сообщение от Karya Посмотреть сообщение
пробовала и полный путь указывать
Покажи как. Кириллицу убрала? В путях нет?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2017, 14:19
Помогаю со студенческими работами здесь

Считывание строк из файла и запись в разные векторы
Как считать строки допустим есть 2 строки в файле input.txt Cat mouse dog House...

Считывание файла в массив и запись нового файла
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и...

Считывание чисел из файла и запись их в массив
Имеется файл txt со следующей строкой: ght# 1, nkat= 8, str= 1.00000, lmv= 0.5000 0.0001 ...

Посимвольное считывание с файла и запись в массив
Всем привет, подскажите, правильно ли я выполняю посимвольное(Нужно считывать, не зная заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru