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