Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Работаем с файлами


Автор: A... 28.11.2004, 14:03
Итак имеется строка в фаиле
Код

2004-08-31 14:07:49.906000,18.0999984741210938,8392705

Нужно разобрать зту строку по частям, т.е.
2004-08-31 надо записать в string
14:07:49.906000 в другой srting
18.0999984741210938 в float (или double)
8392705 в int

пишу код

Код

#include <stdio.h>

main()

{
int b;
float a;
FILE *stream;
char *first = new char[50];
char *second = new char[50];
//char *third = new char[50];

stream = fopen("TF1.CSV", "r+");
fscanf(stream,"%s %s,%f,%d",first,second, &a, &b);

fclose(stream);



return 0;
}


вроде все ок, но делаем debug и видем что
Цитата

в first записалось 2004-08-31 (ок)
в second записалось 14:07:49.906000,18.0999984741210938,8392705
с a и b ничего  не произашло

Вопрос ПОЧЕМУ smile smile

Автор: Mad 28.11.2004, 14:13
Я вобщето scanf() функциям не очень доверяю smile

Код

#include <stdio.h>

main()

{
int b;
float a;
FILE *stream;
char *first = new char[1024];
char *second = 0;

stream = fopen("TF1.CSV", "r+");
fgets(first, 1024, stream);
char *t = strchr(first, ' ');
*t = 0;
second = t+1;
t = strchr(second, ',');
*t = 0;
a = atof(t+1);
t = strchr(t+1, ',');
b = atoi(t+1);

fclose(stream);



return 0;
}


Автор: A... 28.11.2004, 19:12
Mad Да так заработала СПАСИБО.

А можеш обяснить почему мои код не работает ???

Автор: JackYF 29.11.2004, 01:01
По-моему, fscanf и scanf запятую не использует в качестве разделителя, поэтому и не разделяет три последних аргумента.

Автор: sergejzr 29.11.2004, 01:45
A..., обрати внимание, что 18.0999984741210938 не поместится в float!

Автор: A... 29.11.2004, 16:05
sergej.z не в зтом дело, я думаю что проблема во втором "%s". Может нелзья писать
"%s %s", хотя "%d %d" работает без проблем.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)