C ++从文件中读取并标记数据

时间:2012-02-09 15:14:47

标签: c++ tokenize readfile

我正在尝试创建一个C ++程序,它允许我从文件中读取并找到每行输入的匹配项。请注意,每一行都是由昏迷分隔的单个记录。如果找到匹配项,则预期输出将是记录中的字符串。

  

例如:来自file =>的数据

     安德鲁,安迪,安德鲁安德森,玉,厌倦,玉索尼娅刀片

     

输入=>玉

     

输出=>疲惫

我该怎么做?我正在尝试实施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 个答案:

答案 0 :(得分:3)

您可以使用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一次从文件中解析一行。

答案 1 :(得分:0)

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;
}