解析命令行输入文件名以检查内容的正确性

问题描述 投票:0回答:0

想要从命令行解析文件名并检查其正确性,例如(1)总长度,(2)预期扩展名,(3)'_'位置以及其他输入值。

顺序应如下: $check.exe input_file L2A30000_0102051303042026_0001.dat 它应该检查输出文件(L2A30000_0102051303042026_0001.dat)是否按应有的方式键入(不是按精确值,而是按类型和长度)。

// Function to check if a string consists of digits
int isNumeric(const char *str) {
    while (*str) {
        if (!isdigit(*str)) {
        return 0;  // Not a digit
        }
        str++;
    }
    return 1;  // All characters are digits
}

int main(int argc, char *argv[]) {
    // Check if the correct number of command line arguments is  
    provided
    if (argc != 3) {
        printf("Usage: %s inputfile outputfile\n", argv[0]);
        return 1;
    }

   // Extract the output file name from the command line arguments
   const char *outputFileName = argv[2];

   // Define the expected format
   char asciiChar1, numChar1, asciiChar2, numChar2, numChar3[5],      
   underscore1, numChar4[17], underscore2, numChar5[5],  
   numChar6[4], extension[4];

   int result = sscanf(outputFileName, 
   "%c%c%c%c%4[0-9]%c%16[0-9]%c%1[0-9]%3[0-9]_%3[0-9]%4[.dat]",
                    &asciiChar1, &numChar1, &asciiChar2, 
   &numChar2, numChar3, &underscore1, numChar4, &underscore2, 
   numChar5, numChar6, extension);

  // Debugging print statement
  printf("Debug: sscanf result: %d\n", result);

  printf("Debug: asciiChar1: %c\n", asciiChar1);
  printf("Debug: numChar1: %c\n", numChar1);
  printf("Debug: asciiChar2: %c\n", asciiChar2);
  printf("Debug: numChar2: %c\n", numChar2);
  printf("Debug: numChar3: %s\n", numChar3);
  printf("Debug: underscore1: %c\n", underscore1);
  printf("Debug: numChar4: %s\n", numChar4);
  printf("Debug: underscore2: %c\n", underscore2);
  printf("Debug: numChar5: %s\n", numChar5);
  printf("Debug: numChar6: %s\n", numChar6);
  printf("Debug: extension: %s\n", extension);

 // Check if the extracted values match the expected format
 if (result != 12 || !isalpha(asciiChar1) || !isdigit(numChar1) || 
    !isalpha(asciiChar2) || !isdigit(numChar2) ||
    strlen(numChar3) != 4 || !isNumeric(numChar3) ||    
    strlen(numChar4) != 16 || !isNumeric(numChar4) ||
    strlen(numChar5) != 4 || !isNumeric(numChar5) || 
    strlen(numChar6) != 3 || !isNumeric(numChar6) ||
    strlen(extension) != 3 || strcmp(extension, ".dat") != 0) {

    printf("Error: Output file format is incorrect.\n");
    return 1;
}

// If all checks pass, the output file format is correct
 printf("Output file format is correct.\n");

 return 0;
}

命令行输入:

c parsing scanf
© www.soinside.com 2019 - 2024. All rights reserved.