我怎样才能为我的程序验证文件? C ++

时间:2014-02-26 16:27:46

标签: c++ file function

我有一个程序可以读取文件,然后用它读取的信息做各种事情。

现在,我想创建一个函数,在将信息分配到内存之前检查文件中的所有信息。

我不确定我尝试做的是否正确,但这是我的想法,我不知道该怎么做。 如果您有更好的想法,请随时告诉我。

这是我想要实现的函数和读取文件的函数。

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:抱歉我的英文。

3 个答案:

答案 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...