Консультация № 154876
18.12.2008, 18:15
0.00 руб.
0 10 2
Здравствуйте уважаемые специалисты, не подскажете мне как считывать информацию с файла до конца строки?
Вернее мне надо узнать сколько элементов содержится в каждой строке, для того чтобы вставить их в массив.
Как считывать до конца файла и узнавать сколько элементов - это я знаю (см. приложение), а до конца строки пытался через "\r\n", не получается.

Приложение:
void Size(char *NameF)
{
i=0; //счетчик
int d=0; //переменная для того чтобы шло считывание с файла
ifstream finput;
finput.open(NameF);
while (!finput.eof()) //вот тут надо както изменить
{
finput>>d; //записываем элемент в эту переменную
i++; //увеличиваем счетчик
}
i=(i-1);
}

Обсуждение

давно
Академик
20764
1861
18.12.2008, 18:30
общий
это ответ
Здравствуйте, Королев Михаил Николаевич!

Вы можете загрузить строку целиком с помощью функции getline(), из полученой строки создать isstream и читать из него.

Приложение:
string line;
while (getline(finput, line)) {
isstream lin(line);
while (!lin.eof()) {
lin>>d;
...

Неизвестный
18.12.2008, 18:56
общий
я с этим никогда не работал). а нельзя какнибудь сделать на подобии: char* d; while (d!='\n')...
давно
Старший Модератор
17042
808
18.12.2008, 19:28
общий
это ответ
Здравствуйте, Королев Михаил Николаевич!
Если вариант предыдущего эксперта для Вас сложен, то можете сохранять строку в переменной сразу же после считывания (см. приложение). Но getline вполне удобная функция, используйте её.

Приложение:
int d;
string sTmpString;

while (!finput.eof()) // пока файл не кончился...
{
getline(finput, sTmpString); // считываем очередную строку...
d = atoi(sTmpString.c_str()) // и записываем её в переменную
}
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
18.12.2008, 19:58
общий
2 Dr_Andrew.
У меня string не определяется :(
давно
Старший Модератор
17042
808
18.12.2008, 20:51
общий
string - это класс библиотеки STL. Для работы с этим классом необходимо подключить соответствующую библиотеку (#include <string>). Если у Вас не слишком древний компилятор, то всё будет нормально работать.
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Академик
20764
1861
18.12.2008, 21:34
общий
string, iostream и прочее теперь в namespace std
std::string, std::isstream,..

Можно string разбирать - в этом классе куча подходящих методов.

можно и в массив char считывать - в istream есть метод getline(), только это менее удобно.
Неизвестный
18.12.2008, 21:44
общий
в том то и дело, что компилятор древний)). А другой использовать не вариант, тк, проверяется программа только на этом компиляторе. namespace там тоже не пашет.
давно
Академик
20764
1861
18.12.2008, 21:56
общий
тогда всё в main namespace, и вместо sstream - strstream, только у него поведение и api несколько отличаются. Про #include уже не помню, но возможно что и с суффиксом .h В остальном - всё должно присутствовать
Неизвестный
18.12.2008, 22:18
общий
не в main не в самой функции namespace не пашет(. Если считывать не с помощью string, ведь можно как-нибудь использовать указатели, до которых следует считывать?
Неизвестный
19.12.2008, 02:00
общий
Все, всем спасибо, вопрос снят, сделал с помощью указателей
Форма ответа