Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Форматированное чтение из файла

13K
20 июля 2009 года
SpxnezzaR
2 / / 30.09.2005
Доброго времени суток форумчане.
Судя по счетчику давно я тут не был, 4 года прошло.
Ну не суть. Возникла необходимость воспользоваться помощью гуру С++.
Задача чтение данных из файла (вроде бы все тривиально, но е все так просто).
Файл типизирован, строки имеют вид:
 
Код:
10/01/2008 Event log message1
10/02/2008 Event log message2

и т.д.
задача: полуть отдельно день, месяц, год и событие.
Если с первыми тремя все понятно - можно читать сразу из потока в переменную, то с собыстием я встрял, при попытке прочитать в строковую переменную у меня читается только первое слово из события и при следующей интерации происходит залипалово, ибо идет попытка прочитать в числовую переменную следующее слово.
Текущий код вглядит так (строго не судите, мусора много ибо в активной работе):
Код:
int day,mon,year; //числа даты
char d; //используем для разделителя
string event;
ifstream infile(sourcefile); //инициализируем файл
if (infile.is_open())  //если открылся то работаем
        {
                while (infile.good()) // пока читается из потока работаем
                        {
                        infile>>day>>d>>mon>>d>>year>>d>>event;
                        //infile>>d;
                        //infile>>mon;// = infile.get();
                        //infile>>d;
                        //infile>>year;//= infile.get();
                        //infile>>d;
                        //infile>>;//=infile.get();*/
                        cout << day << "-"<< mon << "-" << year << ":" << event<< endl; //выплюнули на экран то что прочитали

                        }

ну как-то так... должно быть понятно
вариант использовать fscanf не вариант (нужно с++ в чистом виде)
вариант заюзать что-то из нестандартных библиотке или снипит из како-го нибудь борланда или еще хуже студии от MS тоже не вариант. Пишу под никсами на нативном gcc 4.3.

если есть у кого собственный снипет для подобно рода вещей (а кто писал парсер логов должен такое иметь) то прошу поделиться, буду очень признателен за помощь.
1
20 июля 2009 года
kot_
7.3K / / 20.01.2000
Во первых - почему бы просто не взять для начала любой нравиящийся парсер логов и не посмотреть, как это по человечески делается?
Во вторых - с таким уровнем вопросов - почему вопрос располагается за пределами темы для начинающих?

Для примера код может выглядеть так (если конечно использовать твой подход):
Код:
char day[3];
char month[3];
char year[5];
char event[512];
...
while(!infile.eof()){
 infile.getline(day,sizeof(day),'/');
infile.getline(month,sizeof(month),'/');
infile.getline(year,sizeof(year),' ');
infile.getline(event,sizeof(event),'\n');
...
}

Код приведен только для примера,предполагается естественно что все необходимые проверки и прочее ты выполнишь и приведешь в работающее состояние.
13K
20 июля 2009 года
SpxnezzaR
2 / / 30.09.2005
Спасибо за помощь, вернусь домой попробую.
1. Пытался найти вразумительный парсер, да кроме сырцов сарга под руками ничего не нашлось, от него крыша поехала так что желание дальше смотреть чужой код отпало
2. Запостил тут, потому как показалось что "Общие вопросы" имена та ветка, куда же еще? Если есть необходимость то перенесите пожалуйста в соответсвующий раздел.
Прошу прощения если показался резким, у меня такое бывает.
----
UPD:
Проверил, работает, спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог