我目前正在尝试测试读取的字符串是否与以下格式匹配,而不使用正则表达式。
代码的格式是:
Supplier Reference: XXXXXXX
Date & Time: XXXX
Name of Device: XXXXX
Priority: X
IP Address: XXXXXXXXXXXXXXXXXXXX
Event ID: XXXXXX
Description of Event: XXXXXXXXXXXX
我希望代码有cout << "Format is incorrect" << endl;
。
这是编辑,取出之前的尝试并回到基础以解释我的逻辑:
using namespace std;
int f;
int main()
{
string mystring;
ifstream myfile ("test.txt");
if (myfile.is_open())
{ while (getline (myfile,mystring))
{
//searches the text entered//
string search;
size_t pos;
{
//searches the text for the Date entry//
{
search = "Supplier Reference:";
pos = mystring.find(search);
{
if (pos != string::npos)
{
cout<<mystring<<endl;
f=f-1;
}
else
{
++f;
}
}
}
{
search = "Date & Time:";
pos = mystring.find(search);
{
if (pos != string::npos)
{
cout<<mystring<<endl;
f = f - 1;
}
else
{
++f;
}
}
}
{
search = "Name of Device:";
pos = mystring.find(search);
{
if (pos != string::npos)
{
cout<<mystring<<endl;
f = f - 1;
}
else
{
++f;
}
}
}
{
search = "Priority:";
pos = mystring.find(search);
{
if (pos != string::npos)
{
cout<<mystring<<endl;
f = f - 1;
}
else
{
++f;
}
}
}
{
search = "IP Address";
pos = mystring.find(search);
{
if (pos != string::npos)
{
cout<<mystring<<endl;
f = f - 1;
}
else
{
++f;
}
}
}
{
search = "Event ID:";
pos = mystring.find(search);
{
if (pos != string::npos)
{
cout<<mystring<<endl;
f = f - 1;
}
else
{
++f;
}
}
}
{
search = "Description of Event:";
pos = mystring.find(search);
{
if (pos != string::npos)
{
cout<<mystring<<endl;
f = f - 1;
}
else
{
++f;
}
}
}
}
}
{
if (f>35)
cout << f << "Field is missing, Ticket is formatted incorrectly" << endl;
}
}
system ("pause");
return 0;
}
我知道代码非常重复。 Cheep and Cheerful是我的目标。
我希望有人能让我知道如何测试线路的顺序?
答案 0 :(得分:0)
解决此问题的一种方法是读取七行(每行数据一行)。如果一行是空的,那么丢弃它并且不计算它。
然后,对于每一行,您将它分割为冒号':'
中的两个字符串。使用左侧部分(例如"Supplier Reference"
)作为std::map
的密钥,右侧部分作为数据。
然后循环遍历地图并确保每个键与文件中所需的键匹配。如果缺少某个密钥,或者地图中存在未知密钥(或者从文件中读取时没有足够的行),则表示格式错误。