Это код считает примерно такую строки с файла
1^CRU^2600^KG
и вот я пытаюсь разбить получену строку
на
int ID =1;
string Name = CRU;
double …..
string …..
Я разбиваю и пытаюсь проверить, что же получилась
Console::WriteLine(ID);
На такое выражение и на
Console::WriteLine(Name.c_str());
На другие наверное также
Выдает в первом случае
0
0
0
……
А во втором пустые строки. Вопрос чего я не так сделал?
Большое спасибо?
за пределы цикла for(int i=0; i< 256;++i), тогда он будет нормально печатать.
А для вашей цели попробуйте использовать std::getline(std::istream,std::string,char delim).
On Tue, 18 Oct 2005 22:50:03 +0400, TARGRED <34292@users.rsdn.ru> wrote:
[]
Воспользуйся для парсинга каким-либо готовым средством, например scanf.
Ты не проверяешь возвращаемое значение getline(). Вызов мог ничего не считать, т.к. ты мог добраться до конца потока. Проверка достигнут ли конец потока до вызова бессмысленна.
Здравствуйте, TARGRED, Вы писали:
TAR> std::getline(std::istream,std::string,char delim).
TAR>А как этим пользоваться? TAR>Спасибо
std::getline(std::istream & istr,std::string &s ,char delim).
В таком виде getline читает данные из потока istr в строку s,
пока не встретиться символ delim или перевод строки или конец файла.
На вашем примере можно использовать так:
std::ifstream file("C:\\DATA\\Commodity.txt");
int id;
std::string name;
std::string size;
double price;
while(!file.eof())
{
std::string s;
std::getline(file,s,'^');
if(s.empty()) break; // не знаю почему, но у меня иногда бывает, что eof() еще возвращает false
// а читать уже нечего, поэтому такая проверка.
id = atoi(s.c_str());
std::getline(file,name,'^');
std::getline(file,s,'^');
price = atof(s.c_str());
std::getline(file,size,'^');
}
Здравствуйте, Vinick, Вы писали:
V>Здравствуйте, TARGRED, Вы писали:
TAR>> std::getline(std::istream,std::string,char delim).
TAR>>А как этим пользоваться? TAR>>Спасибо V>std::getline(std::istream & istr,std::string &s ,char delim). V>В таком виде getline читает данные из потока istr в строку s, V>пока не встретиться символ delim или перевод строки или конец файла.
V>На вашем примере можно использовать так: V>
V> std::ifstream file("C:\\DATA\\Commodity.txt");
V> int id;
V> std::string name;
V> std::string size;
V> double price;
V> while(!file.eof())
V> {
V> std::string s;
V> std::getline(file,s,'^');
V> if(s.empty()) break; // не знаю почему, но у меня иногда бывает, что eof() еще возвращает false
V> // а читать уже нечего, поэтому такая проверка.
V> id = atoi(s.c_str());
V> std::getline(file,name,'^');
V> std::getline(file,s,'^');
V> price = atof(s.c_str());
V> std::getline(file,size,'^');
V> }
V>
TAR> В них происходет следующее TAR>error C2039: 'getline' : is not a member of 'std'
У меня к сожалению нет возможности проверить на VC++.
Но! обратите внимание на прототип getline
std::istream & std::getline(std::istream &, std::string &, char);
Последний параметр имеет тип char, а вы передаете const char *.
Вывод: заменить "^" на '^'.
и не забудьте сделать #include <string>
После этого должно заработать... я так думаю
ЗЫ: надеюсь, что MComm[m].CommodityName и MComm[m].size у вас имеют тип std::string.