C ++ читает из файла и токенизирует данные - PullRequest
1 голос
/ 09 февраля 2012

Я пытаюсь создать программу на C ++, которая позволяет мне читать из файла и находить совпадения ввода в каждой строке.Обратите внимание, что каждая строка - это отдельная запись, разделенная комой.Если совпадение найдено, ожидаемым результатом будет строка из записи.

Например: данные из файла =>

Эндрю, Энди, Эндрю Андерсон
Джейд, Джейд, Jade Sonia Blade

Ввод => Джейд

Выход => измученный

Как я могу это сделать?Я пытаюсь реализовать strtok, но безрезультатно.Пока что я не получаю хороших результатов.Может кто-нибудь, пожалуйста, помогите мне с этим?

РЕДАКТИРОВАТЬ

относительно этой проблемы, я думаю, что я где-то получаю ... но все же экран вывода вылетает, когда я его запускаю.это мой код

    #include <iostream>
#include <fstream>
#include <string>
using namespace std;

main () {
//  string toks[]; 
  char oneline[80],*del;
  string line, creds[4];
  int x = 0;
  ifstream myfile;
   myfile.open("jake.txt");
  if (myfile.is_open())
  {

    while (!myfile.eof())
    {
     getline(myfile,line);
     strcpy(oneline,line.c_str());
     del = strtok(oneline,",");
     while(del!=NULL)
     {
     creds[x] = del;
     del = strtok(NULL,",");
     x++;
     }
    }
    myfile.close();
 }
  else 
  cout << "Unable to open file"; 

  system("pause");
}

Может кто-нибудь пролить свет на это для меня, пожалуйста?

РЕДАКТИРОВАТЬ ....

У меня есть некоторые успехи в этом ...проблема сейчас в том, что при совпадении ввода со следующей строкой происходит сбой ...

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

main () {
//  string toks[]; 
  char oneline[80],*del;
  string line, creds[3], username, password;
  int x = 0;
  cout<<"Enter Username: ";
  cin>>username;
  cout<<"Enter Password: ";
  cin>>password;
  ifstream myfile;
   myfile.open("jake.txt");
  if (myfile.is_open())
  {

    while (!myfile.eof())
    {
     getline(myfile,line);
     strcpy(oneline,line.c_str());
     del = strtok(oneline,",");
     while(del!=NULL)
     {
     creds[x] = del;
     del = strtok(NULL,",");
     ++x;
     }
     if((creds[0]==username)&&(creds[1]==password))
        {
         cout<<creds[2]<<endl;
         break;
         }
    }
    myfile.close();
  }
  else 
  cout << "Unable to open file"; 

  system("pause");
}

Может кто-нибудь помочь мне с этим, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Вы можете использовать boost tokenizer для этого:

#include <boost/tokenizer.hpp>
typedef boost::char_separator<char> separator_type;

boost::tokenizer<separator_type> tokenizer(my_text, separator_type(","));

auto it = tokenizer.begin();
while(it != tokenizer.end())
{
  std::cout << "token: " << *it++ << std::endl;
}

Также см. getline для анализа строки из файла за раз.

0 голосов
/ 09 февраля 2012
int main ()
{
    ifstream file("file.txt");
    string line;
    while (getline(file, line))
    {
        stringstream linestream(line);
        string item;
        while (getline(linestream, item, ','))
        {
            std::cout <<  item << endl;
        }
    }    
    return 0;
}
...