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


Автор: in550 23.5.2007, 11:56
Здравствуйте!

Как можно из текстового файла считать строку Привет, как дела
и вывести в терминал.

Файл следующего содержания:
Код


Он сказал "Привет, как дела" и пошел дальше.


Нужно вывести только Привет, как дела. Как выводить до или после символов
я знаю, а вот как только от кавычки и до другой кавычки (без API) и максимально
просто, я не смог. Т.е. только GNU C++ под Win и Linux.

Помогите.

Автор: beowulf 23.5.2007, 12:04
Пардон за офтоп, тороплюсь
Короче создал на Дельфи ActiveX-компонент, у себя дома установил, а в универе на серваке нимагу. Дельфи на том компу не 
устанавливается. ИИС там есть. Как установить активную форму? 

Автор: FiMa1 23.5.2007, 12:21
Цитата(in550 @ 23.5.2007,  11:56)
Как выводить до или после символов я знаю, а вот как только от кавычки и до другой кавычки...

Имхо, логично ловить вхождение первой пары кавычек. По их обнаружении, ПОКА не встречена следующая пара кавычек накапливаем строку между кавычками в буфер, после чего (когда встретили вторую пару кавычек) выкидываем накопленный в буфер результат на терминал.
Идея ясна? Попробуй решить сам.

Автор: in550 23.5.2007, 12:27
Не. чтото не лезит камянная чаша.  smile 

Автор: FiMa1 23.5.2007, 12:38
Цитата(in550 @ 23.5.2007,  12:27)
Не. чтото не лезит камянная чаша.  smile

Ок, набросал вариантик. Попробуй разобраться.
Код
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    char *fname = "file", str[30], ch;
    int i = 0;

    ifstream in( fname );
    if( in.fail() )
    {
        cout << "Can't open the file" << fname <<  endl;
        return 1;
    }

    //найти первую пару кавычек
    do {
        in.get( ch );
    } while( ch != '"' ) ;

    in.get( ch );
    //ПОКА не найдена вторая пара кавычек
    while ( ch != '"' ) {
        str[i++] = ch;//копить строку в буфер
        in.get( ch );
    }
    str[i] = '\0';//принудительное завершение строки

    return 0;
}

Автор: Rockie 23.5.2007, 12:58
Цитата(in550 @  23.5.2007,  11:56 Найти цитируемый пост)
 Как выводить до или после символов
я знаю, а вот как только от кавычки и до другой кавычки (без API) и максимально
просто, я не смог. Т.е. только GNU C++ под Win и Linux.


in550, юзай http://search.msdn.microsoft.com/search/Default.aspx?query=getline&brand=msdn&locale=en-us&refinement=00&lang=en-us до кавычки дважды. первый раз считываешь 
Цитата
Он сказал 
, а второй раз уже то, что надо: 
Цитата

Привет, как дела

Код

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()    
{    
    string s;    
    ifstream f("text.txt");    
    
    getline(f,s,'"');    
    getline(f,s,'"');    

    puts(s.c_str());

    return 0;
}



Автор: in550 23.5.2007, 13:18
Спасибо! Разобрался!  smile 

Автор: Xenon 23.5.2007, 14:18
Код

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>

template <typename T> void display(T& obj)
{
    std::cout << obj << ' ';
}
int main(int argc, char* argv[])
{
    std::string str = "And he said: \"Yo nigga\" and dreams came true";
    std::vector<std::string> arr;
    std::stringstream str_stream(str);
    while (str_stream)
    {
        std::string buf;
        std::getline(str_stream, buf, '"');
        buf.clear();
        std::getline(str_stream, buf, '"');
        if ( buf.size() ) arr.push_back(buf);
    }
    std::for_each(arr.begin(), arr.end(), display<std::string> );
    std::cin.sync();
    std::cin.get();
    return 0;
}


А, ну по-сути Rockie уже выложил решение

Автор: Xenon 23.5.2007, 14:35
Ну с файлом аналогично
Код

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <algorithm>

template <typename T> void display(T& obj)
{
    std::cout << obj << ' ';
}
int main(int argc, char* argv[])
{
    std::ifstream file ("..");
    std::vector<std::string> arr;
    while (true)
    {
        std::string buf;
        std::getline(file, buf, '"');
        buf.clear();
        std::getline(file, buf, '"');
        if ( file.fail() ) break;
        if ( buf.size() ) arr.push_back(buf);
    }
    std::for_each(arr.begin(), arr.end(), display<std::string> );
    std::cin.sync();
    std::cin.get();
    return 0;
}

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