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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2011, 11:08   #11
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от _kilik_ Посмотреть сообщение
Меткой в данной программе служит первая запятая в строке, после меняем символ на ноль.
Код:
#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;
}
Алгоритм не подходит. В моем коде указатель смешается на 44 символа и нужно менять(в случае удовлетворения условия) 13 символ строки, в которой условие удовлетворено. Есть у кого мысля? сам пока задачу не решил.

Последний раз редактировалось Armatus; 19.08.2011 в 11:14.
Armatus вне форума Ответить с цитированием
Старый 19.08.2011, 11:20   #12
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

как сместить указатель на 32 символа назад?

Я бы предположил такой код, но он не работает:

Код:
int str(){
ifstream fr(strcat(Date().FormatString("yyyymmdd").t_str(),".txt"));    //открываем файл на чтение и запись
int i=0;
while(!fr.eof()){
fr.getline(&c[0],44,'\n');
if (c[0]!='9'&&c[12]=='1')  //проверка на корректность номера
{//send();
i=fr.tellg()-33;    // номер символа "1" нужной строки
	 ofstream fw(strcat(Date().FormatString("yyyymmdd").t_str(),".txt"));
	 fw.seekp(i,ios::beg); //перемещаем указатель
	 fw.put('0');//меняем символ на 0
	 fw.flush();
	 fw.close();
	 }
}
fr.close();
return 0;       //Все ок!
}

Последний раз редактировалось Armatus; 19.08.2011 в 11:39.
Armatus вне форума Ответить с цитированием
Старый 19.08.2011, 13:35   #13
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Решил задачу вот таким способом. может кому пригодится) всем спасибо за помощь!
Код:
int str(){
ifstream fr(strcat(Date().FormatString("yyyymmdd").t_str(),".txt"));    //открываем файл на чтение и запись
int i=0;
while(!fr.eof()){
fr.getline(&c[0],44,'\n');
if (c[0]!='9'&&c[12]=='1')  //проверка на корректность номера
{
if (fr.eof()) {i=fr.tellg()-30;}else{i=fr.tellg()-32;} // выявляем последнюю строку
	 fstream fw(strcat(Date().FormatString("yyyymmdd").t_str(),".txt"));
	 fw.seekg(i,ios::beg); //перемещаем указатель
	 fw.put('0');//меняем символ на 0
	 fw.close();
	 }
}
fr.close();
return 0;       //Все ок!
}
Armatus вне форума Ответить с цитированием
Старый 22.08.2011, 10:25   #14
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Народ кто знает какая маска вывода часов у функции Date().FormatString()? Т.е. нужно вывести часы в формате 24.
Armatus вне форума Ответить с цитированием
Старый 06.10.2011, 12:53   #15
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

вот такой вот код. От него требуется менять каждый символ находящийся за знаком ; на 1:
Код:
fstream fw(strcat(Date().FormatString("yyyymmdd").t_str(),".txt"));
fw.ignore(255,';');//игноририруем до симвода ';'след симв '0'
fw.seekp(fw.tellg(),ios::beg);//переводим на символ '0' курс запис
i=fw.tellg();
fw.put('1');//меняем символ на 1
fw.flush();
fw.ignore(255,'\n');//переходим к след строке;
текстовый файл содержит строки:

99999999999,1,23.08.11 02:28:29,БОЖ0100705;0
99999999999,1,23.08.11 02:28:13,БОЖ0100704;0

в отличии от требований, курсор передвигается не на последний символ строки(0) а на 36, что выявил в пошаговом режиме, путем присвоения значения int перемнной i. в чем ошибка?

Последний раз редактировалось Armatus; 06.10.2011 в 17:26.
Armatus вне форума Ответить с цитированием
Старый 07.10.2011, 13:56   #16
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

В пошаговом режиме выявил, что вторая строка "fw.ignore(46,';');" по какой то причине пропускается и сразу после первой строки "fstream fw(strcat(Date().FormatString("yyyy mmdd").t_str(),".txt"));" выполняется третья "fw.seekp(1,ios::cur);". В чем проблема?
Armatus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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