C++;如何检查此文本文件中的分隔符 我是C++新手。我想知道如何创建一个函数来检查分隔符

C++;如何检查此文本文件中的分隔符 我是C++新手。我想知道如何创建一个函数来检查分隔符,c++,C++,比如下面的例子 AD,Andorra,AN,AD,AND,20.00,Andorra la Vella,Europe,Euro,EUR,67627.00 AE,United Arab Emirates,AE,AE,ARE,784.00,Abu Dhabi,Middle East,UAE Dirham,AED,2407460.00 AF,Afghanistan,AF,AF,AFG,4.00,Kabul,Asia,Afghani,AFA,26813057.00 如果分隔符变成$或#而不是逗号,我如

比如下面的例子

AD,Andorra,AN,AD,AND,20.00,Andorra la Vella,Europe,Euro,EUR,67627.00
AE,United Arab Emirates,AE,AE,ARE,784.00,Abu Dhabi,Middle East,UAE Dirham,AED,2407460.00
AF,Afghanistan,AF,AF,AFG,4.00,Kabul,Asia,Afghani,AFA,26813057.00
如果分隔符变成$或#而不是逗号,我如何创建一个函数来检查它,并说,文本文件的格式错误

谢谢

下面是我的readData代码

void readData ()
{
    FILE * pFile;
    NoOfRecordsRead = 0;
    char buffer [Line_Char_Buffer_Size];

    pFile = fopen (INPUT_FILE_NAME , "r");

    if (pFile == NULL) 
        perror ("Error opening file 'Countries.txt' !");
    else
    {
        while ( !feof (pFile) )
        {
            char* aLine = get_line (buffer, Line_Char_Buffer_Size, pFile);

            if (aLine != NULL)
            {
//              printf ("%d] aLine => %s\n", NoOfRecordsRead, aLine);
                globalCountryDataArray [NoOfRecordsRead++] = createCountryRecord (aLine);
            }
        }

     fclose (pFile);

    }
}

您需要一种可靠的方法来找到您始终希望分隔符为的位置。如果第一个字段的宽度始终为2个字符,则可以检查第三个字符是否为
。否则,您可以向后扫描文本的第一行,查看第一个非货币相关字符是否为

Edit:您的
readData
例程非常以C语言为中心,正如评论中指出的那样。使用C++特性可以大大简化它。

std::string aLine;
std::ifstream pfile(INPUT_FILE_NAME);
while (pfile) {
    std::getline(pfile, aLine);
    if (aLine.size()) {
        globalCountryDataArray.push_back(createCountryRecord(aLine));
    }
}
#包括
#包括
#包括
bool检测逗号(标准::字符串文件名)
{
//打开C++流到文件
std::ifstream文件(file_name.c_str());
//文件未打开,返回false
如果(!file.is_open())返回false;
//从文件中读取一行
std::字符串wtf;
std::istream&in=std::getline(文件,wtf);
//无法读取该行,返回false
如果(!in)返回false;
//尝试查找逗号,如果在字符串中找到逗号,则返回true
返回std::find(wtf.begin(),wtf.end(),',')!=wtf.end();
}
#包括
#包括
int main()
{
如果(!detect_逗号(“yourfile.dat”))
{

执行检查的一个好方法是使用Boost.Regex库。您只需定义正则表达式并在输入与表达式匹配时执行检查

示例代码:

#include <string>
#include <boost/regex.hpp>

using namespace std;

int main()
{
  const string input("AD,Andorra,AN,AD,AND,20.00,Andorra la Vella,Europe,Euro,EUR,67627.00");
  const boost::regex ex("(?:(?!,)(\\d+\\.\\d*)|(\\w|\\s)*)(,(?:(?!,)(\\d+\\.\\d*)|(\\w|\\s)*))*");
  cout << boost::regex_match(input.c_str(), ex) << endl;
  return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
常量字符串输入(“AD,安道尔,AN,AD和,20.00,安道尔,欧洲,欧元,欧元,67627.00”);
常量boost::regex ex(“(?:(?!,)(\\d+\\\.\\d*))(\\w\\\\\s)*)(,(?:(?!,)(\\d+\\.\\d*)(\\w\\\\\\s)*)*”;

无法发布适用于逗号的代码。发布您当前的工作代码片段,以便我们能更好地帮助您。
如果分隔符变成$or#而不是逗号,我如何创建一个函数来检查它并说,文本文件的格式错误
-这必然假设$or#都不是数据的一部分,否则就没有办法了让您知道$or#的使用是有意还是无意的
FILE*pFile;
是C。
printf
也是C。
#include <string>
#include <boost/regex.hpp>

using namespace std;

int main()
{
  const string input("AD,Andorra,AN,AD,AND,20.00,Andorra la Vella,Europe,Euro,EUR,67627.00");
  const boost::regex ex("(?:(?!,)(\\d+\\.\\d*)|(\\w|\\s)*)(,(?:(?!,)(\\d+\\.\\d*)|(\\w|\\s)*))*");
  cout << boost::regex_match(input.c_str(), ex) << endl;
  return 0;
}