Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 06.11.2014
Сообщений: 156
1

Считать данные из файла и получить подстроки, следующие за ";"

17.05.2015, 13:26. Показов 774. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мой файл имеет следующий вид
Кликните здесь для просмотра всего текста

day: 17 month: 5 year: 2015 Isubject of a court case: work1 Claimant name company: clcomp1 phone company: 12345 Accused name company: Accomp1 phone company: 54321
day: 20 month: 1 year: 1231 Isubject of a court case: work2 Claimant name company: Clcomp2 phone company: 54646 Accused name company: Accomp2 phone company: 25461


Как считать правильно данные?
Нужны данные которые стоят после ":".
Чтобы было понятно что и куда считывать даю функцию которой этот файл записывался
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void RecordToFile(){
    ofstream fout("E:\data1.txt");
    for (int i = 0; i < MAX; i++){
        fout << "day: " << arrCourt[i].info.d << "\t";
        fout << "month: " << arrCourt[i].info.m << "\t";
        fout << "year: " << arrCourt[i].info.y << "\t";
        fout << "Isubject of a court case: " << arrCourt[i].scc << "\t";
 
        fout << "Claimant" << "\t"; //Это не нужно никуда  считывать, просто подзаголовок
        fout << "name company: " << arrCourt[i].cinf.data.fname << "\t";
        fout << "phone company: " << arrCourt[i].cinf.data.p << "\t";
 
        fout << "Accused " << "\t";//Это не нужно никуда  считывать, просто подзаголовок
        fout << "name company: " << arrCourt[i].acinf.data.fname << "\t";
        fout << "phone company: " << arrCourt[i].acinf.data.p << endl;
    }
    fout.close();
    system("pause")
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2015, 13:26
Ответы с готовыми решениями:

Считать строки из файла и сделать поиск подстроки
Здравствуйте. У меня есть файл в котором надо сделать поиск. Пример файла: Buffon Juventus...

Как исправить ошибку. Ввожу следующие данные Xin=1 Xout=10 шаг 2 a=1 b=0 c=2 по идеи должен считать по F=x-a/x-c а он считате по F=x/c
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include...

необходимо получить результат 6 имея следующие данные
int a; a=3.7+2; как получить 6????

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

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

10
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
18.05.2015, 04:41 2
Цитата Сообщение от Lord007 Посмотреть сообщение
Мой файл имеет следующий вид
Сам придумал в таком формате данные хранить? Прежде чем записывать данные в файл, нужно подумать о том, как их потом извлекать из файла.
0
0 / 0 / 1
Регистрация: 06.11.2014
Сообщений: 156
18.05.2015, 07:01  [ТС] 3
lss, да.
0
Модератор
Эксперт С++
 Аватар для zss
13727 / 10923 / 6480
Регистрация: 18.12.2011
Сообщений: 29,157
18.05.2015, 07:46 4
Пропускаете символы до двоеточия, читаете переменную, снова пропускаете до двоеточия и т.д.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void skip(ifstream& fin)
{
     while( fin.get()!=':')
        ;
}
...
ifstream dat("file.txt");
skip(dat);
dat>>day;
skip(dat);
dat>>month;
skip(dat);
dat>>year;
...
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
18.05.2015, 08:04 5
zss, похожий вариант ему предложен: Есть ли в С++ функция для считывания информации с файла с подробной настройкой?, но зачем такое вытворять, если можно просто данные в файл записывать в другом формате, чтобы избежать лишних сложностей при чтении, тем более у ТС это не задание такое, а он сам так придумал, а значит легко может придумать и что-то получше.
1
0 / 0 / 1
Регистрация: 06.11.2014
Сообщений: 156
19.05.2015, 18:34  [ТС] 6
zss, "dat>>day;" - это передача потока dat в переменную day, так ведь? Я пытался передать данные в структуру используя твою функцию, но ничего не вышло. Можешь показать как это сделать?Может там нужно что-то добавить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void skip(ifstream& fin)
{
    while (fin.get() != ':')
        ;
}
void Inputfromfile()
{
    ifstream dat("file.txt");
    test();
    for (int i = 0; i < MAXr; ++i)
    {
        skip(dat);
        dat >> arrCourt[i].info.d;
        skip(dat);
        dat >> arrCourt[i].info.m;
        skip(dat);
        dat >> arrCourt[i].info.y;
    }
}
Добавлено через 15 минут
zss, посмотри пожалуйста на всю мою программу может увидишь что исправить нужно чтобы заработала запись с файла в структуры.
Кликните здесь для просмотра всего текста

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <windows.h>
#include <string>
 
using namespace std;
 
struct contacts{                
    double p;               //phone
    string fname;               //name of firm
    };
struct accused{                 //Обвиняемый
    contacts data;              //Подключаем структуру данных с контактами
    };
struct claimant{        //Истец
    contacts data;              //Подключаем структуру данных с контактами
};
struct date
{
    double d;           //day
    double m;           //month 
    double y;           //year
};
struct courtcase            // Судебное дело
{
    string scc;         //subject of a court case - предмет судебного дела
    date info;          //подключаем структуру date
    claimant cinf;      //подключаем структуру claimant
    accused acinf;      //подключаем структуру accused
    void show()
    {
        cout << "day: " << info.d << "\n";
        cout << "month: " << info.m << "\n";
        cout << "year: " << info.y << "\n";
        cout << "Isubject of a court case: " << scc << "\n";
        
        cout << "Claimant " << "\n";
        cout << "name company: " << cinf.data.fname << "\n";
        cout << "phone company: " << cinf.data.p << "\n";
 
        cout << "Accused " << "\n";
        cout << "name company: " << acinf.data.fname << "\n";
        cout << "phone company: " << acinf.data.p << "\n\n";
    }
    
};
//------Global Variable---------
int MAX;    // для кол-ва судебных дел
int MAXr;
courtcase* arrCourt = NULL;
//-------------------------------------
void InputData(){
    cout << "Enter the number of courtcase: ";
    cin >> MAX;
    delete[] arrCourt;
    arrCourt = new courtcase[MAX];
 
    for (int i = 0; i < MAX; i++){
        
        cout << "Input date " << endl;
        cout << "Input day: " ;
        cin >> arrCourt[i].info.d;
        cout << "Input mouth: " ;
        cin >> arrCourt[i].info.m;
        cout << "Input year: " ;
        cin >> arrCourt[i].info.y;
        cout << "Isubject of a court case: ";
        cin >> arrCourt[i].scc;
        
        cout << "Claimant " << endl;    //Истец
        cout << "Input data of claimant " << endl; //Введите информацию о заявителе/истце
        cout << "Input company name : ";
        cin >> arrCourt[i].cinf.data.fname;
        cout << "Input phone company : ";
        cin >> arrCourt[i].cinf.data.p;
        
        cout << "Accused " << endl;
        cout << "Input data of accused " << endl; //Введите информацию об обвиняемом
        cout << "Input company name : ";
        cin >> arrCourt[i].acinf.data.fname;
        cout << "Input phone company : ";
        cin >> arrCourt[i].acinf.data.p;
        system("cls");
    }
    system("pause");
    system("cls");
}
void RecordToFile(){
    ofstream fout("E:\file.txt");
    for (int i = 0; i < MAX; i++){
        fout << "day: " << arrCourt[i].info.d << "\t";
        fout << "month: " << arrCourt[i].info.m << "\t";
        fout << "year: " << arrCourt[i].info.y << "\t";
        fout << "Isubject of a court case: " << arrCourt[i].scc << "\t";
 
        fout << "Claimant" << "\t";
        fout << "name company: " << arrCourt[i].cinf.data.fname << "\t";
        fout << "phone company: " << arrCourt[i].cinf.data.p << "\t";
 
        fout << "Accused " << "\t";
        fout << "name company: " << arrCourt[i].acinf.data.fname << "\t";
        fout << "phone company: " << arrCourt[i].acinf.data.p << endl;
    }
    fout.close();
    system("pause");
}
void Readingfile(){
    setlocale(LC_ALL, "rus");
    char buff[170]; // buffer
    ifstream fin("E:\\file.txt");
 
    if (!fin.is_open()) // esli file ne otkrut
        cout << "Файл не может быть открыт!\n";
    else
    {
        while (!fin.eof()){
            fin.getline(buff, 170);
            cout << buff << endl;
        }
        fin.close();
    }
    system("pause");
    system("cls");
}
void test(){
    ifstream fin("E:\file.txt");
    while (fin.ignore(170, '\n')){
        MAXr++;
    };
    MAXr -= 1;
    cout << "Строк : " << MAXr << endl;
}
void skip(ifstream& fin)
{
    while (fin.get() != ':')
        ;
}
void Inputfromfile()
{
    ifstream dat("E:\file.txt");
    test();
    for (int i = 0; i < MAXr; ++i)
    {
        skip(dat);
        dat >> arrCourt[i].info.d;
        skip(dat);
        dat >> arrCourt[i].info.m;
        skip(dat);
        dat >> arrCourt[i].info.y;
    }
    system("pause");
    system("cls");
}
 
 
void OutputGenerate(){
    cout << "Output array" << endl;
    for (int i = 0; i < MAX; i++){
        arrCourt[i].show();
    }
    system("pause");
    system("cls");
}
 
 
int menu() {
    int menu;
    do{
        cout << "Choose menu item" << endl;
        cout << "1 - input data " << endl;
        cout << "2 - Output  array" << endl;
        cout << "3 - Output sort array" << endl;
        cout << "4 - Sort arr" << endl;
        cout << "5 - Record to file" << endl;
        cout << "6 - Reading file" << endl;
        cout << "7 - Input from file" << endl;
    
        //cout << "9 - test" << endl;
        cin >> menu;
        switch (menu){
        case 1:InputData(); break;
        case 2:OutputGenerate(); break;
        case 3:cout << "Function in the development " << endl; break;
        case 4:cout << "Function in the development " << endl; break;
        case 5:RecordToFile(); break;
        case 6:Readingfile(); break;
        case 7:Inputfromfile(); break;
    
        case 9:test(); break;
        default: menu = 0;
        }
    } while (menu != 0);
    return 0;
}
int main()
{
    setlocale(LC_ALL, "rus");
    menu();
    delete[] arrCourt;
    system("pause");
    return 0;
}
0
Модератор
Эксперт С++
 Аватар для zss
13727 / 10923 / 6480
Регистрация: 18.12.2011
Сообщений: 29,157
19.05.2015, 19:10 7
Как-то Вы неаккуратно написали (остальные поля тоже надо вводить и именно в том порядке, в котором они писались):
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
void Inputfromfile()
{
    ifstream dat("e:\\file.txt"); // Не забывайте про два \\
    if (!dat) // esli file ne otkrut
        cout << "Файл не может быть открыт!\n";
    else
    {   
        if(!arrCourt)
            arrCourt = new courtcase[MAXr];
        int i=0;
        while(dat && i<MAXr)
        {
            skip(dat);
            dat >> arrCourt[i].info.d;
            skip(dat);
            dat >> arrCourt[i].info.m;
            skip(dat);
            dat >> arrCourt[i].info.y;
            skip(dat);
            dat >> arrCourt[i].scc;
            skip(dat);
            dat >> arrCourt[i].cinf.data.fname;
            skip(dat);
            dat >> arrCourt[i].cinf.data.p;
// проверьте содержимое читаемого файла, похоже там еще что-то записано
            i++;
        }
    }
}
1
0 / 0 / 1
Регистрация: 06.11.2014
Сообщений: 156
19.05.2015, 21:27  [ТС] 8
zss, спасибо , сейчас проверю и лишние записи в файле уберу.

Добавлено через 31 минуту
zss, все отлично работает. Я тебе задам пару вопросов чтобы понять что и как работает, ок?
"if (!dat)" - это значит ели не запушен поток?
"if(!arrCourt)" - если не существует массива arrCourt, объявляем динам.массив.
"while(dat && i<MAXr)" - пока есть поток и условие i<MAXr.
"skip(dat);" - функция skip прогоняет поток , но можешь объяснить это - "while (fin.get() != ':')", как я понял она пропускает все до ":".
Конкретно про "fin.get() != ':' "
Затем следует таб в файле и вступает в работу "dat >> arrCourt[i].info.d;", ну, а с этим всё понятно.
Если не затруднит моя просьба объясни кратенько и скажи правильно ли я понял то о чё писал.
0
Модератор
Эксперт С++
 Аватар для zss
13727 / 10923 / 6480
Регистрация: 18.12.2011
Сообщений: 29,157
19.05.2015, 21:29 9
Вы все правильно поняли!
0
0 / 0 / 1
Регистрация: 06.11.2014
Сообщений: 156
19.05.2015, 21:36  [ТС] 10
zss, а можете сказать что-то про "fin.get() != ':'". "fin.get" - это какое-то сокращение функций, или что-то конкретное?
0
Модератор
Эксперт С++
 Аватар для zss
13727 / 10923 / 6480
Регистрация: 18.12.2011
Сообщений: 29,157
20.05.2015, 10:23 11
Метод int istream::get() возвращает очередной прочитанный символ из входного потока.
Поскольку нам его запоминать не надо, то мы результат ничему не присваиваем,
а только сравниваем с двоеточием.
1
20.05.2015, 10:23
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2015, 10:23
Помогаю со студенческими работами здесь

Считать данные из файла
Есть структура public struct info_train { public string fromtrain; public string...

Считать данные из файла
Доброго времени суток. Нужна помощь. Есть текстовый файл типа: Номер: 1 Имя: mmm Год выпуска:...

Считать данные из файла
Написать программу считывающая данный из файла прямого доступа сконструированные следующим образом:...

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

Считать данные из файла
Как считать данные из файла???? using System; using System.Text.RegularExpressions; using...

Считать данные из файла
Нужно сделать так чтоб данные брались с файла а не с консоли ,кто может исправить? #include...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru