【问题标题】:How do I "slice" a content in an ini file如何在 ini 文件中“切片”内容
【发布时间】:2021-12-26 07:58:53
【问题描述】:

try.ini 文件:

[teachers]
teacher1 = joseph
teacher2 = ryan

[students]
student1 = john
student2 = johnny

[class]
class1 = biology
class2 = chemistry

源文件:

char x[255];

file = fopen("try.ini", "r");
    
while (fgets(x, 255, file) != NULL) {

        if (strcmp(x, "[students]\n") == 0) {
            //This prints the title
            printf("%s", x);
        }
        else {
            //This is to test for else statement
            printf("test");
        }

}

我正在尝试“切片”内容以获取标题及其下方的内容。所以例如使用strcmp,当while语句找到匹配时,它会打印出它的标题和它下面的内容,而忽略其余的内容。

所以想要的输出是:

 [students]
 student1 = john
 student2 = johnny

我在想这是一种可行的方法,以及如何读取顶部内容末尾到下一个标题之间的空白字符串?例如:

  teacher2 = ryan
  <blank space>
  [students]

【问题讨论】:

  • 可以搜索“c源解析.ini文件”
  • 我想我已经看透了 parse .ini 外部库,但我仍然不明白它是如何工作的。因此,我试图使程序尽可能简单,因为我只读取 ini 文件内容,如果可以不使用它来完成的话。尽管能够使用它会很有用,因为它将提供额外的访问权限,例如读写 ini 文件。
  • 每个部分之前可能有也可能没有空行。检查行是否以[ 开头,这表示新部分的开始。 fgets 返回一个缓冲区,从行尾删除\n,修剪它,如果长度为零则为空白。

标签: c ini


【解决方案1】:

它将打印其标题及其下方的内容,并忽略其余内容。

所以,当你知道你在[student] 部分内时:

  • 读线
  • 检查该行是否包含[&lt;any text here&gt;]
    • 如果是,退出或中断
  • 检查该行是否为空(或以#开头的注释)
    • 忽略该行 - 从第 1 步开始重复
  • 否则,输出该行
  • 并从第 1 步开始重复

所以:

file = fopen("try.ini", "r");
while (fgets(x, 255, file) != NULL) {
        if (strcmp(x, "[students]\n") == 0) {
            printf("%s", x);
            while (fgets(x, 255, file) != NULL) {
                if (x[0] == '[' &&
                        strlen(x) > 2 &&
                        x[strlen(x) - 1] == ']') {
                    break;
                }
                if (strcmp(x, "\n") == 0) { 
                    continue;
                }
                // TODO: maybe check some invalid input or comments
                printf("%s", x);
            }
   ....

【讨论】:

  • 我想我已经根据条件理解了切片内容,谢谢!虽然中间有一些条件可能会导致切片不切片一些应该切片的内容。
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2018-01-15
相关资源
最近更新 更多