Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
brkLTL
1 / 1 / 0
Регистрация: 18.07.2012
Сообщений: 8
#1

Чтение из файла: getline() не работает - C++

22.08.2012, 00:02. Просмотров 2794. Ответов 4
Метки нет (Все метки)

У меня такая ситуация: Есть два файла: words1.txt и cities-source.txt. Прилагаются.words1.txt
cities-source1.txt
Берем первую строку из words1 и начинаем сравнивать со строками в cities-source. Если во втором файле есть такая строка, то её печатаем.
Но я до этого не дошел, после того как i инкрементируется до 2, поиск в cities-source.txt не начинается с начала.
В чём моя ошибка?

Результат здесь
|asd_min=48
|word1=
|word1=123
|word1=
|word2=234
|word1=
|asd_sec=52
|word1=
|qwe_dir=005
|word1=
|qwe_deg=13
|word1=
|word3=345
|word1=
|word4=456
|word1=
|word5=567
|word1=
|qwe_min=6
|word1=
|qwe_sec=03
|word1=
|ddn=2345
|word1=
|calcalcal=234
|word1=
|asd_dir=665
|word1=
|asd_deg=50
|word1=
|asd_min=48
|word1=
|word1=123
|word1=
|word2=234
|word1=
|asd_sec=52
|word1=
|qwe_dir=005
|word1=
|qwe_deg=13
|word1=
|word3=345
|word1=
|word4=456
|word1=
|word5=567
|word1=
|qwe_min=6
|word1=
|qwe_sec=03
|word1=
|ddn=2345
|word1=
|calcalcal=234
|word1=
|calcalcal=234
|word2=
|calcalcal=234
|word2=
|calcalcal=234
|word2=
...
|calcalcal=234
|word5=
|calcalcal=234
|word5=

Process returned 0 (0x0) execution time : 0.797 s
Press any key to continue.


Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// search in exported xml file
 
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
   ifstream inputFile("E:\\A.TEMP\\cities-source1.txt"); // source xml file
   ifstream inputWord("E:\\A.TEMP\\words1.txt"); // source xml file
   ofstream outputFile("E:\\A.TEMP\\cities-result.txt"); // results output file
 
   string transfer; // temp string
   string word; // search keyword
 
   for(int i = 0; i < 5; i++)
   {
      getline(inputWord,word); // assign to "word" first word from file
      //cout << "getline(inputWord,word)" << word << endl; // visual control only
 
      for(int j = 0; j < 30; j++)
      {
         getline(inputFile,transfer); // assign to "transfer" first string from file
         //cout << "getline(inputFile,transfer)" << transfer << endl; // visual control only
 
         //if(transfer.find(word) != string::npos) // if transfer string contains word's word print transfer string
         cout << transfer << endl; // if ok, replace cout by outputFile
         cout << word << endl; // delete if ok
      }
   }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2012, 00:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение из файла: getline() не работает (C++):

Getline чтение из файла - C++
#include &lt;iostream&gt; using std::cout; using std::cin; using std::endl; using std::ios; using std::cerr; #include &lt;fstream&gt; ...

Чтение из файла, не используя getline - C++
Вот ВЕСЬ код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &lt;Windows.h&gt; using...

Чтение с текстового файла getline()-ом - C++
Приветствую Всех! У меня возникла проблема с getline() Я должен прочитать из текстового файла строки по порядку в цикле...

Как начать чтение файла сначала после Getline с первой строчки в fstream? - C++
Пишу программу,которая читает строки их текстового файла и передаёт их в поле Edit1 поочерёдно,по нажатию кнопки.Когда строки...

string, getline() чтение строк - C++
Здравствуйте, помогите пожалуйста написать часть кода. Задача состоит в том, чтобы прочитать данные из строк, отдельные поля дат отделяются...

Чтение текстовых файлов для новичков (getline) - C++
Задача чтения и обработки текстового файла - одна из самых распространенных. Она сравнительно проста, но у новичков порой возникают...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 01:36 #2
Детали сами додумаете:
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
   ifstream inputFile("cities-source1.txt"); 
   if(!inputFile.is_open()) cout << "Error opening  file cities-source1.txt!" << endl;
   ifstream inputWord("words1.txt"); 
   if(!inputWord.is_open()) cout << "Error opening  file words1.txt!" << endl;
   ofstream outputFile("cities-result.txt"); 
   if(!outputFile.is_open()) cout << "Error opening  file cities-result.txt!" << endl;
 
   string transfer;
   string word;
 
   for(int i = 0; i < 5; i++)
   {
      getline(inputWord,word);
      for(int j = 0; j < 30; j++)
      {
         
         getline(inputFile,transfer); 
         
         if(!(transfer.compare(0, word.size(), word)))
         { 
            cout << transfer << endl; 
            cout << word << endl;
            outputFile << transfer << endl;
            outputFile << word << endl;
            inputFile.clear();
         } 
       }
       
       inputFile.clear();
       inputFile.seekg(0);
    }
 
    cin.get();
    return 0;
 
}
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
22.08.2012, 01:37 #3
добавьте в конец второго цикла (тот, что for(int j = 0; j < 30; j++))
C++
1
2
3
4
if ( inputFile.eof() ) {
             inputFile.clear();
             inputFile.seekg (0, ios::beg);
         }
brkLTL
1 / 1 / 0
Регистрация: 18.07.2012
Сообщений: 8
22.08.2012, 14:36  [ТС] #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Детали сами додумаете:
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
   ifstream inputFile("cities-source1.txt"); 
   if(!inputFile.is_open()) cout << "Error opening  file cities-source1.txt!" << endl;
   ifstream inputWord("words1.txt"); 
   if(!inputWord.is_open()) cout << "Error opening  file words1.txt!" << endl;
   ofstream outputFile("cities-result.txt"); 
   if(!outputFile.is_open()) cout << "Error opening  file cities-result.txt!" << endl;
 
   string transfer;
   string word;
 
   for(int i = 0; i < 5; i++)
   {
      getline(inputWord,word);
      for(int j = 0; j < 30; j++)
      {
         
         getline(inputFile,transfer); 
         
         if(!(transfer.compare(0, word.size(), word)))
         { 
            cout << transfer << endl; 
            cout << word << endl;
            outputFile << transfer << endl;
            outputFile << word << endl;
            inputFile.clear();
         } 
       }
       
       inputFile.clear();
       inputFile.seekg(0);
    }
 
    cin.get();
    return 0;
 
}
Всё, кажется понял.
А на 39 строке не inputWord.clear() должен быть, а не inputFile.clear()?
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 23:26 #5
Цитата Сообщение от brkLTL Посмотреть сообщение
А на 39 строке не inputWord.clear() должен быть, а не inputFile.clear()?
Во внутреннем цикле чтение идёт из inputFile до конца файла. При достижении конца файла устанавливетя флаг eofbit. Для того, чтобы снова читать из этого файла (при следующеё итерации внешнего for), нужно этот флаг сбросить и вернуть курсор в начало файла. Для inputWord флаг eofbit устанавливается при выходе из внешнего for. Так как дальше к этому потоку обращение не происходит, то и в сбрасывании флага нужды нет. Для порядка, после 41 строки, нужно дописать:
C++
1
2
3
inputFile.close();
inputWord.close();
outputFile.close();
В 35 строке: inputFile.clear(); не нужен, это я лишнее написал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2012, 23:26
Привет! Вот еще темы с ответами:

Не работает на С++ чтение с файла в сменную - C++
Всем здрасте. Я делаю курсовую. И вот такое. У меня есть структура: struct Catalog { string PName; string Pnaz; string...

Чтение/запись битового файла (не работает) - C++
Программа по идее должна записывать/читать битовый файл, но она даже его не создаёт. ...

Чтение из файла в CodeBlocks работает, а в QtCreator - нет - C++
Один и тот же компилятор (LLVM Clang): в CodeBlocks код работает, в QtCreator - нет. То же самое с MinGW. Один и тот же MinGW: в...

Чтение из файла - программа корректно работает лишь раз - C++
пишу курсовую,возникла проблема, суть: при первом запуске вроде работает всё нормально, при следующем же либо просто черный экран, либо ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.08.2012, 23:26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru