Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2011, 12:39   #1
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию Чтение и запись fstream

Суть вопроса заключается в следующем: Имеется текстовый файл ".txt" содержанием:
99999999999,1,12.08.11,16:32:32,БОЖ 0000011
89206053638,1,15.08.11,16:33:20,БОЖ 0000013
89051753983,1,15.08.11,16:31:01,БОЖ 0000010
89532767171,1,15.08.11,16:33:13,БОЖ 0000012

Код выполняет чтение строк файла пока не найдет конец файла.Хотелось бы заменять 13 символ с 1 на 0. Заранее благодарен. Приблизительный код вот:
Код:
int str(){
fstream fp(strcat(Date().FormatString("yyyymmdd").t_str(),".txt"));    //открываем файл на чтение и запись
while(!fp.eof()){
fp.getline(&c[0],44,'\n');
if (c[0]!='9'&&c[12]=='1')  //проверка на корректность номера
{send();
//  for (int i = 0; i < 44; i++) {
//	 if (i==12) {fp<<"0";}
//	 else{fp<<c[i]<<endl;}
//	 }
}
}
fp.close();
return 0;       //Все ок!
}

Последний раз редактировалось Armatus; 18.08.2011 в 13:05.
Armatus вне форума Ответить с цитированием
Старый 18.08.2011, 12:42   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Ну и? В чём здесь проблема?
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.08.2011, 12:45   #3
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Проблема в том что закомментированный код не работает) Так же нужно что бы код работал построчно, т.е. прочитал 1ую строку - изменил цифру 1ой строки, прочитал 2ю - изменил 2ю.
Armatus вне форума Ответить с цитированием
Старый 18.08.2011, 12:55   #4
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

А оформить код тегом # не круто? А то ведь совсем нечитаемо.
А именно надо fstream? Вапше-то лучше пользовать отдельно ifstream и ofstream, хотя у вас, конечно, ситуация специфическая.
Код:
int str()
{
   ifstream input("myfile.txt"); 
   while(!input.eof())
   {
         input.getline(&c[0],44,'\n');
         if ( c[0] != '9' &&  c[12] == '1' ) 
         {
              send();
              for (int i = 0; i < 44; i++) 
              {
                   fp << i ? 0 : c[i];
              }
         }
         input.close();
         return 0; 
}
Теперь у меня к вам вопросы.
1) Так код гораздо легче читать, не правда ли?
2) Зачем в функции str() return 0?! Ну, в смысле, вы вапше зачем делаете функцию int, если можно сделать void в вашем случае?
3) Скорее всего, у вас проблема в цикле, потому как вы пытаетесь прочитав строку после неё записать какое-то число.
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.08.2011, 13:04   #5
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

1) Да читабельность явно возросла =)
2) Функция str вызывается другой функцией и об успехе ее выполнения нужно будет сообщить.
3) fp << i ? 0 : c[i]; Как работает это строка?
Armatus вне форума Ответить с цитированием
Старый 18.08.2011, 13:06   #6
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
fp << i ? 0 : c[i]; Как работает это строка?
Это тернарный оператор. Ссылка.
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.08.2011, 13:23   #7
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

В моем случае это строка должна выглядеть так?
12=i?fp<<0 :fp<<c[i];
Armatus вне форума Ответить с цитированием
Старый 18.08.2011, 13:26   #8
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Нет.
Видите ли, первое выражение тернарного оператора должно иметь тип bool. Если i != 0, то оно будет true, если i == 0 , то оно будет false.
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.08.2011, 13:41   #9
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
3) Скорее всего, у вас проблема в цикле, потому как вы пытаетесь прочитав строку после неё записать какое-то число.
мне нужно не после строки записать а заменить 13 символ в строке с 1 на 0.

Тогда таким образом?

12==i?fp<<0 :fp<<c[i];

Последний раз редактировалось Armatus; 18.08.2011 в 13:48.
Armatus вне форума Ответить с цитированием
Старый 18.08.2011, 15:29   #10
_kilik_
Пользователь
 
Аватар для _kilik_
 
Регистрация: 16.08.2011
Сообщений: 69
По умолчанию

Меткой в данной программе служит первая запятая в строке, после меняем символ на ноль.
Код:
#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;

int str();

int main(){
	
	str();
	system("pause");
	return 0;
}

int str(){
	fstream io("test.txt",ios::in|ios::out|ios::binary);// чтения запись, бинарный реж
	//если файл не открыт
	if(!io){
		cout<<"ошибка файл не открыт";
		return 1;
	}
	//читаем до конца файла
	while(io.good()){			
		io.ignore(255,',');//игноририруем до симвода ','след симв '1'
		io.seekp(io.tellg(),ios::beg);//переводим на символ '1' курс запис
		io.put('0');//меняем символ на 0
		io.flush();
		io.ignore(255,'\n');//переходим к след строке
	}
	return 0;
}

Последний раз редактировалось _kilik_; 18.08.2011 в 16:04.
_kilik_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла в запись THX35 Фриланс 8 19.03.2010 22:41
fstream, чтение и запись .txt willfogg Помощь студентам 0 26.04.2009 18:26
Чтение и запись FilMapping Micher85 Общие вопросы Delphi 0 28.10.2008 22:33
Запись и чтение файла... Altera Общие вопросы Delphi 5 06.05.2008 20:22
Запись и чтение сообщений Altera Работа с сетью в Delphi 6 13.04.2008 03:31