14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
1

Функция чтения столбцов чисел из текстового файла

07.01.2014, 01:02. Показов 5783. Ответов 29
Метки нет (Все метки)

Необходима функция, которая откроет текстовый файл, прочтет заранее заданное количество столбцов в массив массивов.
В файле находятся не меньше одного столбца чисел записанных в одном из возможных форматов: 1234.213455 или -5.78786E-5.
До этого реализовывал на C#: читал в строки, затем регулярным выражением выбирал только то, что подходит, складывал в листы, затем перекладывал в массив массивов.
Сейчас изучаю С++ на реальных заданиях, прошу помощи.
Пишу в Qt.

Добавлено через 2 часа 49 минут
Чтение файла построчно с заполнением в массив, так правильно?

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
#include <iostream>
#include <fstream>
 
int main()
{
    using std::cin;
    using std::cout;
 
    const int imax = 10;
    fstream inp_str();
    inp_str.open("C:/Exp.txt", ios::in);
 
    string arr [imax];
    int i;
 
    if(!inp_str)
    {
        cout << "Error!";
        return 0;
    }
 
    for(i = 0; i < imax; i++)
    {
        inp_str >> arr[i];
        cout << arr[i];
    }
 
    return 0;
}
Добавлено через 7 минут
Остается вопрос о том как спарсить из каждой строки первые N совпадений.
(регулярное выражение для чисел у меня есть)
А также как быть с тем, что количество строк заранее неизвестно?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2014, 01:02
Ответы с готовыми решениями:

Шаблонная функция для чтения целых чисел, дробных, строк из файла
Необходимо написать шаблонную функцию для чтения целых чисел, дробных, строк из файла. С числами...

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

Чтения массива из текстового файла
У меня есть тхт файл который получился из Опен Офиса(нет у меня не чего кроме него) сл вида: ...

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

29
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
07.01.2014, 13:58  [ТС] 21
У меня как раз тоже сейчас получилось.
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
#include <iostream>
#include <fstream>
 
using namespace std;
int main()
{
    using std::cin;
    using std::cout;
 
    const int imax = 356;
    ifstream inp_str;
    inp_str.open("C:/Exp.txt");
 
    double arr [imax];
    int i;
 
    if(!inp_str)
    {
        cout << "Error!";
        return 0;
    }
 
    for(i = 0; i < imax; i++)
    {
        inp_str >> arr[i];
        cout << arr[i] <<"\t";
    }
 
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
alsav22
07.01.2014, 14:03
  #22

Не по теме:

Цитата Сообщение от Glevera Посмотреть сообщение
У меня как раз тоже сейчас получилось.
Какое совпадение...

0
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
07.01.2014, 14:10  [ТС] 23
  1. А как прочитать файл до конца? Я сейчас конкретное число чисел из файла читал, а хотелось бы знать сколько строк прочитано.
  2. Также возникает вопрос, а что если в одной из строк будет меньше/больше чисел, чем N?
    В С# я брал из каждой строки первые N вхождений регуляркой, это гарантировало чтение N чисел из каждой строки. Если вхождений было меньше N, чтение файла прекращалось.
  3. Что будет, если одно из чисел будет записано неправильно?
    В С# правильность гарантировалась регуляркой.
0
5488 / 4883 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.01.2014, 15:11 24
Цитата Сообщение от Glevera Посмотреть сообщение
А как прочитать файл до конца?
C++
1
2
3
4
5
6
i = 0;
while (inp_str >> arr[i])
{
    cout << arr[i] <<"\t";
    ++i;
}
Только массив должен быть подходящего размера. А так как количество чисел в файле не известно, то читать в vector <double>.

Добавлено через 6 минут
Цитата Сообщение от Glevera Посмотреть сообщение
Также возникает вопрос, а что если в одной из строк будет меньше/больше чисел, чем N? В С# я брал из каждой строки первые N вхождений регуляркой, это гарантировало чтение N чисел из каждой строки. Если вхождений было меньше N, чтение файла прекращалось.
Тут столько решений, что лень писать.

Добавлено через 1 минуту
Цитата Сообщение от Glevera Посмотреть сообщение
Что будет, если одно из чисел будет записано неправильно?
Тут посложнее, но тоже есть решение. Сейчас пример выложу.

Добавлено через 30 минут
В вектор будут записаны числа только в правильном формате:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vector <double> v;
        double n;
        cout.precision(9);
        while (true)
        {
            fin >> n;
            if (fin && (fin.peek() == ' ' || fin.peek() == '\n'))
            {
                v.push_back(n);
                cout << n << ' ';
            }
            else
            {
                if (fin.eof()) break;
                fin.clear();
                while (fin.peek() != ' ' && fin.peek() != '\n' && fin.peek() != EOF)
                    fin.get();
            }
        }
1
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
07.01.2014, 15:32  [ТС] 25
[QUOTE=alsav22;5604315]
C++
1
2
3
4
5
6
i = 0;
while (inp_str >> arr[i])
{
    cout << arr[i] <<"\t";
    ++i;
}
У меня при выполнении все удачно, но в конце такая ошибка.
https://www.dropbox.com/s/93yg... .03.29.png
Это из-за того, что не контролируется закончился файл или нет, да?
0
Заблокирован
07.01.2014, 15:40 26
Glevera, отладку запустите и увидите на что ругаеться
0
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
07.01.2014, 15:55  [ТС] 27
https://www.dropbox.com/s/gkqs... .49.57.png
Такое вот при отладке...
Количество строк - 400, размер массива - 402.
0
Заблокирован
07.01.2014, 16:03 28
Glevera, а как вы задаете arr?
0
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
07.01.2014, 16:35  [ТС] 29
Ev_Hyper,
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
#include <iostream>
#include <fstream>
 
using namespace std;
int main()
{
    using std::cin;
    using std::cout;
 
    const int imax = 402;
    ifstream inp_str;
    inp_str.open("C:/Exp.txt");
 
    double arr [imax];
    int i = 0;
 
    if(!inp_str)
    {
        cout << "Error!";
        return 0;
    }
 
    while (inp_str >> arr[i])
    {
        cout << arr[i] <<"\t";
        ++i;
    }
 
    return 0;
}
0
5488 / 4883 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.01.2014, 18:56 30
Цитата Сообщение от Glevera Посмотреть сообщение
Количество строк - 400, размер массива - 402.
Количество строк - не количество чисел в файле. Чисел больше, вот и не помещаются в массив. Советовал же читать в вектор (24 пост).
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
#include <iostream>
#include <fstream>
 
using namespace std;
int main()
{
    using std::cin;
    using std::cout;
 
    const int imax = 402;
    ifstream inp_str;
    inp_str.open("C:/Exp.txt");
 
    double arr [imax];
    int i = 0;
 
    if(!inp_str)
    {
        cout << "Error!";
        return 0;
    }
 
    while ((i < imax) && (inp_str >> arr[i]))
    {
        cout << arr[i] <<"\t";
        ++i;
    }
 
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2014, 18:56
Помогаю со студенческими работами здесь

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

Программа для чтения из текстового файла в бинарный.
Доброго времени суток! Пытаюсь разобраться в коде. Программа для чтения из текстового файла в...

Как отловить событие чтения текстового файла
Приветствую всех, друзья! Возник такой вопрос: Вот у меня есть некий текстовый файл....

Открытие текстового файла для чтения с общим доступом
Всем здравствуйте. Есть текстовый файл cо строками одинакового формата. Используется он для...


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

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

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