我有一个程序可以读取文件,然后用它读取的信息做各种事情。
现在,我想创建一个函数,在将信息分配到内存之前检查文件中的所有信息。
我不确定我尝试做的是否正确,但这是我的想法,我不知道该怎么做。 如果您有更好的想法,请随时告诉我。
这是我想要实现的函数和读取文件的函数。
void Arreglo::FileValidation(ifstream &entrada)
{
//implementation of the function
}
void Arreglo::Registro(ifstream &entrada)
{
entrada >> Cantidad;
Dealer = new Element[Cantidad];
for (int i = 0; i < Cantidad; i++) {
entrada >> Dealer[i].CompanyName;
entrada >> Dealer[i].AmountModels;
if (Dealer[i].AmountModels > MaxModel)
MaxModel = Dealer[i].AmountModels;
Dealer[i].Modelo = new Detail[Dealer[i].AmountModels];
for (int j = 0; j < Dealer[i].AmountModels; j++) {
entrada >> Dealer[i].Modelo[j].ModelName
>> Dealer[i].Modelo[j].Sales;
}
}
}
更多信息:
我想检查文件中的信息是这样的。
4
Toyota
6
Corolla 1
Tercel 1
Avalon 1
Camry 1
Yaris 1
Supra 1
Mazda
6
3 8
5 2
6 2
2 2
Legend 2
RX7 2
Nissan
6
Sentra 3
Altima 3
Optima 3
350Z 3
Cube 3
GT-R 3
Acura
4
RSX 4
Legend 4
RDX 5
TL 6
PD:抱歉我的英文。
答案 0 :(得分:1)
阅读和验证必须携手完成,你无法验证,然后阅读(至少不容易)。
确切要验证的内容在很大程度上取决于输入数据的错误程度。它可能就像几乎什么都没做一样简单,只需读取数据;考虑温和的条件(检查过长的字符串,数字必须在一定范围内);所有范围都非常偏执,因为检查数字是否写成数字并且不包含字母或其他信件,例如,这些名称包含在经过批准的名称列表中。
答案 1 :(得分:1)
你想检查什么?文件是由某个更改还是格式正确? 如果要跟踪它是否已更改,只需在文件的末尾(或开头)附加数据内容的校验和。当您重新读取文件时,可以将数据内容的校验和与最后(或开始)保存的校验和进行比较。
答案 2 :(得分:1)
您应该学会在阅读时验证数据:
void Arreglo::Registro(ifstream &entrada)
{
if (!(entrada >> Cantidad))
throw std::runtime_error("input missing dealer count");
Dealer = new Element[Cantidad];
for (int i = 0; i < Cantidad; i++) {
if (!(entrada >> Dealer[i].CompanyName))
throw std::runtime_error("input missing company name");
...etc...