Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
IIIa66uMEM6eP
заставил Бендера
435 / 291 / 10
Регистрация: 05.12.2010
Сообщений: 1,644
Записей в блоге: 6
#1

Работа с файлом, найти, изменить. - C++

10.05.2011, 18:26. Просмотров 1264. Ответов 20
Метки нет (Все метки)

Добрый день. Задание по файлам, любая помощь приветствуется (справка, написание куска кода)
Задача:
Есть исходный файл input.txt(прикреплен). В нем 3 колонки разделенные ";" - 1 колонка с названием банков, строковый тип ну и две колонки с цифрами вещественного типа. эти две колонки соответственно за 2000 и 2001 год. И так суть задания:
Создать новый файл Output.txt в котором.
1) Получить список банков, выдавших в 2000г ссуду более 5 млн. руб.
2) Определить какой из банков, и в каком году выдал наибольшую ссуду.
3) Удалить информацию о банке, который не выдавал ссуду хоть в одном из годов. (на том месте 0)
4) Упорядочить названия банков по убыванию суммарной выданной ссуды.

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

Не по теме:

Пишу на DEV-C++, просьба не отправлять в справку по студии..

Вложения
Тип файла: txt input.txt (493 байт, 25 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2011, 18:26     Работа с файлом, найти, изменить.
Посмотрите здесь:

Работа с файлом. Необходимо изменить программу - C++
Мне преподаватель сказал, что программа сделана правильно. Теперь необходимо ее переделать так, чтобы после создания файла выполнялась...

Найти победителя, работа с файлом C++ - C++
Подскажите, как сделать так, что-бы можно было выявить победителя общего, то есть по очкам какая команда (только одна у которой больше...

Работа с bmp файлом не получается найти ошибку - C++
Добрый день, знаю что существуют разные способы считывания bmp файла, мне нужно считать таким образом что бы заголовок лежал в одном...

Найти слова, встречающиеся в каждом предложении текста. Работа с файлом опять) - C++
Дан файл, содержащий текст на русском языке. Найти слова, встречающиеся в каждом предложении текста или сообщить, что таких слов нету. ...

Работа с файлом - C++
Добрый вечер. Нужно подсчитать количество точек, попадающих в круг радиуса 4 с центром в начале координат. На паскале такую прогу уже делал...

Работа с файлом - C++
в общем есть некая решенная задача которая имеет классы и методы(ввода и вывода) для них, нужно ювелирно переделать методы так чтоб они...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IIIa66uMEM6eP
заставил Бендера
435 / 291 / 10
Регистрация: 05.12.2010
Сообщений: 1,644
Записей в блоге: 6
31.05.2011, 19:21  [ТС]     Работа с файлом, найти, изменить. #16
Реализую сложение ссуд банков за 2000 и 2001 год. Складывает без учета флотовской запятой. тобишь к примеру 13.3 + 1.4 = 14.
Знаю что ошибка в считывании потока с этими данными в строку, но не допру как изменить
Прикрепляю входной и выходной файлы.

И так. Чуть чуть ДО пиленный код

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
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <windows.h>
#pragma comment(lib,"kernel32.lib") 
using namespace std;
 
//структура содержимого
struct bank{
  std::string  bank_name_; // строка с именами банков
  float       money_2000y_, money_2001y_; 
 
  friend istream &operator>> (istream &is, bank &inf){
    string buf; // буферная строка
    getline(is, inf.bank_name_, ';'); // берем всю строку с именами банков и
    is >> buf;  // переносим в буферную строку
    // заменяем до конца пробелами после двоеточия с 1 позиции
    replace(buf.begin(), buf.end(), ';', ' ');
    //
    istringstream ist(buf); // считываем из потока строки
    //перенаправляем поток 
    ist >> inf.money_2000y_ >> inf.money_2001y_;
    return is;
  }
};
 
int main(){
        setlocale (LC_CTYPE, "rus");
// открываем файл
  ifstream ifs("C:\\input.txt");
  if(!ifs){
    cerr << "File Not Found" << endl;
    return 1;
  } 
  string tmp;
  ifs >> tmp; //передаем строке значения
  tmp.clear(); // вызов удаления всех символов
  const size_t count_banks_in_file(20);// так 20 строк банков
  vector<bank> v(count_banks_in_file);  //динамический массив
  //Открываем файл для записи
  ofstream fout ("C:\\output.txt");
  //
  
 // сначала ищем те у которых > 5 милионов рублей
fout << "Банки у которых прибыль составила больше 5 милионов: "<< endl;
  for(size_t i = 0; i < count_banks_in_file; ++i){ // поиск
    ifs >> v[i]; // передаем массиву
    if(v[i].money_2000y_ >= 5.0) // если найден элемент больший 5.0
     fout << v[i].bank_name_ << '\n'; // то вывести банки с такими элементами 
                                        // в строке (запишем в новый файл)
  }
 fout << endl;
 // ---------------------------------------------------------
fout << "Показываем в каком году банк выдавал наибольшую ссуду: " << endl;
    
  // теперь ищем самую большую суду
  for(size_t i = 0; i < count_banks_in_file; ++i)
  {
    ifs >> v[i];
 
    string max_element = (v[i].money_2000y_ > v[i].money_2001y_? "2000" : "2001");
     fout <<  v[i].bank_name_ <<'\t'<< max_element << endl;
  //--------------------------------------------
  }
 // удаляем информацию о банке, который не выдавал ссуду хотябы в одном из годов (0)
   fout << endl; 
   fout << "Удаляем следующие банки, которые в один из годов не выдавали суды.";
     for(size_t i = 0; i < count_banks_in_file; ++i)
  {
    ifs >> v[i];
    if(v[i].money_2000y_ == 0 || v[i].money_2001y_ == 0)
    fout << v[i].bank_name_ << '\n';      
  } 
fout << endl;
 //----------------------------------------------
fout << "Сумма суды выданной банками за 2 года: " << endl;
 //Упорядочиваем названия банков по убыванию суммарной выданной ссуды.
 //Сначала складываем суды 2000 и 2001 года. 
 
  for(size_t i = 0; i < count_banks_in_file; ++i)
  {     
   ifs >> v[i];
   float summa = v[i].money_2000y_ + v[i].money_2001y_;
   fout << summa << endl;
  } 
 
 
 //-----------------------------------------------
  //закроем файл
  fout.close();
  //
cout << endl; 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Вложения
Тип файла: txt input.txt (489 байт, 9 просмотров)
Тип файла: txt output.txt (843 байт, 9 просмотров)
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
31.05.2011, 19:25     Работа с файлом, найти, изменить. #17
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
Складывает без учета флотовской запятой. тобишь к примеру 13.3 + 1.4 = 14
Еще раз..
Цитата Сообщение от asics Посмотреть сообщение
В файле целая часть числа отделяеться от дробной точкой, а не запятой.
IIIa66uMEM6eP
заставил Бендера
435 / 291 / 10
Регистрация: 05.12.2010
Сообщений: 1,644
Записей в блоге: 6
31.05.2011, 20:35  [ТС]     Работа с файлом, найти, изменить. #18
asics, спасибо) оно

Добавлено через 17 минут
asics, еще вопрос.. мне нужно удалить в файле строки с банками которые не выдавали суды в каком либо из годов (в этой графе стоит 0). Я написал условие, но как работать с файлом не знаю.. Возможно как то с темповским файлом, возможно еще как то. Подскажите..
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
31.05.2011, 20:50     Работа с файлом, найти, изменить. #19
C++
1
2
3
4
5
6
7
8
9
std::fstream fs("input.txt", std::ios::in);//Открываеш на чтение
/*
Все сожержимое заносиш в буфер(ы) с которым(и) будеш работать
*/
fs.close()//Закрываеш поток
fs.open("input.txt", std::ios::out)//и открываеш его на запись
/*
Тут заносиш в файл только те данные которые нужно
*/
IIIa66uMEM6eP
заставил Бендера
435 / 291 / 10
Регистрация: 05.12.2010
Сообщений: 1,644
Записей в блоге: 6
04.06.2011, 22:52  [ТС]     Работа с файлом, найти, изменить. #20
Выложу то что получилось.. Вдруг кто то что то переймет.
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
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <windows.h>
#pragma comment(lib,"kernel32.lib") 
using namespace std;
 
//структура содержимого
struct bank
{
  string  bank_name_; // строка с именами банков
  float       money_2000y_, money_2001y_; 
 
  friend istream &operator>> (istream &is, bank &inf){
    string buf; // буферная строка
    getline(is, inf.bank_name_, ';'); // берем всю строку с именами банков и
    is >> buf;  // переносим в буферную строку
    // заменяем до конца пробелами после двоеточия с 1 позиции
    replace(buf.begin(), buf.end(), ';', ' ');
    //
    istringstream ist(buf); // считываем из потока строки
    //перенаправляем поток 
    ist >> inf.money_2000y_ >> inf.money_2001y_;
    return is;
  }
};
 
int main(){
        setlocale (LC_CTYPE, "rus");
// открываем файл
  ifstream ifs("C:\\input.txt");
  if(!ifs){
    cerr << "File Not Found" << endl;
    return 1;
  } 
  string tmp;
  ifs >> tmp; //передаем строке значения
  tmp.clear(); // вызов удаления всех символов
  const size_t count_banks_in_file(20);// так 20 строк банков
  vector<bank> v(count_banks_in_file);  //динамический массив
  //Открываем файл для записи
  ofstream fout ("C:\\output.txt");
  //
  
 // сначала ищем те у которых > 5 милионов рублей
fout << "__________________________________________________________________" << endl;
fout << "Банки у которых прибыль составила больше 5 милионов: "<< endl;
fout << "__________________________________________________________________" << endl;
  for(size_t i = 0; i < count_banks_in_file; ++i){ // поиск
    ifs >> v[i]; // передаем массиву
    if(v[i].money_2000y_ >= 5.0) // если найден элемент больший 5.0
     fout << v[i].bank_name_ << '\n'; // то вывести банки с такими элементами 
                                        // в строке (запишем в новый файл)
  }
 fout << endl;
 fout << endl; 
 // ---------------------------------------------------------
fout << "__________________________________________________________________" << endl;
fout << "Показываем в каком году банк выдавал наибольшую ссуду: " << endl;
fout << "__________________________________________________________________" << endl;    
  // теперь ищем самую большую суду
  for(size_t i = 0; i < count_banks_in_file; ++i)
  {
    ifs >> v[i];
 
    string max_element = (v[i].money_2000y_ > v[i].money_2001y_? "2000" : "2001");
     fout <<  v[i].bank_name_ <<'\t'<< max_element << endl;
  //--------------------------------------------
  }
  
  /////////////////////////////////////////////////////////////////////////////////
 // удаляем информацию о банке, который не выдавал ссуду хотябы в одном из годов (0)
   fout << endl; 
fout << "__________________________________________________________________" << endl;
   fout << "Удаляем следующие банки, которые в один из годов не выдавали суды." << endl;
   fout << "Выводим только те - которые выдавали: " << endl;
fout << "__________________________________________________________________" << endl;
   fout << endl;
     for(size_t i = 0; i < count_banks_in_file; ++i)
  {
fstream fs("C:\\input.txt", std::ios::in);//Открываеш на чтение
 
//Все сожержимое заносим в буфер(ы) с которым(и) будем работать
ifs >> v[i];
fs.open("C:\\output.txt", std::ios::out); //и открываем его на запись
//Тут заносим в файл только те данные которые нужно
if(!(v[i].money_2000y_ == 0 || v[i].money_2001y_ == 0)) // перезаписываем по условию 
fout << v[i].bank_name_ << '\n';
  } 
  /////////////////////////////////////////////////////////////////////////////////
fout << endl;
 //----------------------------------------------
fout << "__________________________________________________________________" << endl;
fout << "Сумма суды выданной банками за 2 года: " << endl;
fout << "__________________________________________________________________" << endl;
fout << endl;
 //Упорядочиваем названия банков по убыванию суммарной выданной ссуды.
 //Сначала складываем суды 2000 и 2001 года. 
  for(size_t i = 0; i < count_banks_in_file; ++i)
  {     
   ifs >> v[i];
   float summa = v[i].money_2000y_ + v[i].money_2001y_;
   fout << v[i].bank_name_ << " " << summa << endl;
  } 
fout << endl;
fout << "__________________________________________________________________" << endl;
 //-----------------------------------------------
  //закроем файл
  fout.close();
  //
cout << endl; 
    system("PAUSE");
    return EXIT_SUCCESS;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2011, 21:30     Работа с файлом, найти, изменить.
Еще ссылки по теме:

работа с файлом - C++
объясните, пожалуйста, что тут происходит. особенно строчку, где ofs.write(reinterpret_cast&lt;char const*&gt;(arr), n * sizeof(*arr)); ...

Работа с файлом - C++
Помогите если не затруднит. Есть текстовый файл(примерно такой): A asdada qweqw A ijiijij nvbjk rtrt A

Работа с файлом - C++
вот смотрите есть файл chisla.txt В нем содержатся цифры ( Например 101 258 164) Как мне изъять из файла ТОЛЬКО 1 число (например 101)???

Работа с файлом - C++
ofstream file1(&quot;C:\\Users\\User\\Desktop\\jewelry.txt&quot;); Ошибка 6 error C2146: синтаксическая ошибка: отсутствие &quot;;&quot; перед...


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

Или воспользуйтесь поиском по форуму:
IIIa66uMEM6eP
заставил Бендера
435 / 291 / 10
Регистрация: 05.12.2010
Сообщений: 1,644
Записей в блоге: 6
28.06.2011, 21:30  [ТС]     Работа с файлом, найти, изменить. #21
И так) действие не закончилось, теперь есть задача - изменить информацию о банке, к примеру изменить выданную в 2001 году суду. для любого банка, на любую величину.
И немного поменялось условие, теперь это нужно сделать в данном файле - тоесть перезаписать его, а не создавать новый.
Помогайте пожалуйста.

Добавлено через 5 часов 5 минут
помогайте ребят, нужна отметка..

Добавлено через 2 часа 15 минут
есть у кого какие мнения
Yandex
Объявления
28.06.2011, 21:30     Работа с файлом, найти, изменить.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru