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


Автор: DragoonFighter 22.2.2008, 22:36
Лазил в гоогле но нечего не нашёл. В смысле нашёл много чего но не совсем понял подходит ли то что я нашёл к моей программе. Есть файл где находятся строчки. В каждой строчке несколько слов. Эти слова пишутся через запятую а по серединке этой строчки какой не будь знак. Например "=" . В программе есть функция srand(time(0))  которая генерирует число. Программа должна входить в файл со словами и выбрать строчку которой число соответствует с числом генерируемым srand(time(0)). При чтение строчки выводит только те слова которые идут до знака = и вводит их в string. Потом читает слова после нашего знака и вводит их в другой string. Вот теперь у нас два стринга, и при выводе cout << наш стринг; в консоли видно наши слова из файла. Главное чтобы слова до нашего знака были отлучены от слов после нашего знака.

Например:
Наш файл
german = немецкий                               //первая строчка
test = классная работа, тест
drugs, medezine = наркотики, ...           //третья строчка

Может кто помочь, если поняли что я имею в виду? За ранние спасибо! 

P.S.: Думаю мне для начала хватит пример функции для чтения из файла до знака и после знака а все остальное, я уже знаю как сделать, теоретически.

Автор: JackYF 23.2.2008, 00:16
DragoonFighter, считываешь построчно, затем ищем позицию "=", затем из входной строки генерируешь две подстроки. В чём проблема?

Автор: DragoonFighter 24.2.2008, 16:37
Цитата(JackYF @  23.2.2008,  00:16 Найти цитируемый пост)
считываешь построчно,


Да вот в этом моя проблема, я не знаю как это сделать, т.е. с какой функцией. Лазил в и-нете, нашёл много чего но не понял как мне это юзать. Можно пример считывание строк с файла?

Автор: xKOCMOCx 24.2.2008, 18:03
Цитата(DragoonFighter @ 24.2.2008,  16:37)
Цитата(JackYF @  23.2.2008,  00:16 Найти цитируемый пост)
считываешь построчно,


Да вот в этом моя проблема, я не знаю как это сделать, т.е. с какой функцией. Лазил в и-нете, нашёл много чего но не понял как мне это юзать. Можно пример считывание строк с файла?

юзай char *fgets(char *s, int n, FILE *stream);

Автор: DragoonFighter 24.2.2008, 18:32
Нашёл. Понял как, вот пример: 

Код

FILE * pFile;
   char mystring [100];

   pFile = fopen ("myfile.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
     fgets (mystring , 100, pFile);
     puts (mystring);
     fclose (pFile);
     }


Но есть одна проблема... он просто при задаче числа выбирает буквы с первого ряда. Можете привести полный пример где создаётся файл и из него при вводе цифры выводится на экран строка/слова с ряда под номером этой цифры, до знака "=", и тоже самое после нашего знака?  smile 

Автор: bsa 24.2.2008, 18:44
Примерно так:
Код
#include <string>
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>

typedef std::pair<std::string, std::string> KeyValue;
typedef std::vector<KeyValue> KeyValueVector;

int main()
{
    std::ifstream file("file.txt");
    KeyValueVector data;
    while(file.good()) {
        std::string str;
        std::getline(file, str);
        if (str.size()) {
            std::size_t pos = str.find_first_of('=');
            data.push_back( KeyValue(str.substr(0, pos), str.substr(pos+1)) );
        }
    }
    for(KeyValueVector::const_iterator i = data.begin(), end = data.end(); i != end; ++i)
        std::cout << i->first << " - " << i->second << std::endl;
    return 0;
}
Чтобы позиционироваться на нужную строку нужно перейти в начало файла, и считать n-1 строк. Или, если файл небольшой, то можно его весь считать в массив, а потом уже с ним и работать.

Автор: DragoonFighter 28.2.2008, 00:11
Все работает, протестировал изучил но вот со считыванием n-1 строк не совсем понял что вы имеете в виду. 
(У меня 40 файлов в которых около 40-ка строк.)

Автор: DragoonFighter 29.2.2008, 17:29
 smile 

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