10/01/2008 Event log message1
10/02/2008 Event log message2
Форматированное чтение из файла
Судя по счетчику давно я тут не был, 4 года прошло.
Ну не суть. Возникла необходимость воспользоваться помощью гуру С++.
Задача чтение данных из файла (вроде бы все тривиально, но е все так просто).
Файл типизирован, строки имеют вид:
Код:
и т.д.
задача: полуть отдельно день, месяц, год и событие.
Если с первыми тремя все понятно - можно читать сразу из потока в переменную, то с собыстием я встрял, при попытке прочитать в строковую переменную у меня читается только первое слово из события и при следующей интерации происходит залипалово, ибо идет попытка прочитать в числовую переменную следующее слово.
Текущий код вглядит так (строго не судите, мусора много ибо в активной работе):
Код:
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; //выплюнули на экран то что прочитали
}
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.
если есть у кого собственный снипет для подобно рода вещей (а кто писал парсер логов должен такое иметь) то прошу поделиться, буду очень признателен за помощь.
Во вторых - с таким уровнем вопросов - почему вопрос располагается за пределами темы для начинающих?
Для примера код может выглядеть так (если конечно использовать твой подход):
Код:
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');
...
}
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');
...
}
Код приведен только для примера,предполагается естественно что все необходимые проверки и прочее ты выполнишь и приведешь в работающее состояние.
1. Пытался найти вразумительный парсер, да кроме сырцов сарга под руками ничего не нашлось, от него крыша поехала так что желание дальше смотреть чужой код отпало
2. Запостил тут, потому как показалось что "Общие вопросы" имена та ветка, куда же еще? Если есть необходимость то перенесите пожалуйста в соответсвующий раздел.
Прошу прощения если показался резким, у меня такое бывает.
----
UPD:
Проверил, работает, спасибо.