c/c++语言开发共享解析具有多个公共分隔符C的文件

我正在使用C语言中的基本命令行音乐库,它允许您通过命令行打开文件,并添加艺术家,歌曲标题和发布年份等信息。 一旦退出,它就会将该信息写回同一文件中。

我遇到的问题是试图找到一个正确解析文本文件的解决方案。

例如,输入文件将如下所示:

Title: Heirloom, Artist: Basenji, Year Published: 2014 Title: With Me, Artist: Cashmere Cat, Year Published: 2014 

我正在研究的项目(反对通常的做法)指出,我们将一行信息存储在如下所示的struct Song

 struct Song { char title[250]; char artist[250]; int year_published; }; 

每首Song都存储在struct Song类型的数组中,称为music_lib[]

我知道如何通过执行以下操作将每一行分成一个特定的struct Song

 while(fscanf(input_file, "%s %s %ld", *temp_title, *temp_artist, *temp_year) != EOF) copy_song_to_music_library(temp_title, temp_artist, temp_year); 

我不知道怎么做是如何正确解析文本文件,以便当我有一个已知的格式:

Title: Heirloom, Artist: Basenji, Year Published: 2014

对于我的标题变量,我得到“传家宝”(和标题:被删除),对于我的艺术家变量,我得到“Basenji”(与艺术家:剥离),而对于我的年变量我得到2014年(发布年份:剥离出来)。

是否有捷径可寻?

    你需要改变

     while(fscanf(input_file, "%s %s %ld", *temp_title, *temp_artist, *temp_year) != EOF) 

     while(fscanf(input_file, "Title: %s, Artist: %s, Year Published: %ld", *temp_title, *temp_artist, *temp_year) != EOF) 

    此外,您需要检查fscanf()的返回值以确保正确读取。

    来自fscanf()的手册页

    。 。 。 返回成功匹配和分配的输入项的数量,可以少于提供的数量,或者在早期匹配失败的情况下甚至为零。

    一些相关的参考:

    这个(和家庭)function的签名是

     int fscanf(FILE *stream, const char *format, ...); 

    其中, const char *format被描述为

    格式字符串由一系列指令组成,这些指令描述了如何处理输入字符序列。

    格式的预期格式是[强调我的]

    指令是以下之一:

    •一系列空格字符(空格,制表符,换行符等;请参阅isspace(3))。 该指令匹配输入中的任何数量的空白区域,包括无空格。

    •普通字符(即除空格或’%’以外的字符)。 此字符必须与输入的下一个字符完全匹配。

    •转换规范,以’%’(百分号)字符开头。 根据此规范转换输入中的字符序列,并将结果放在相应的指针参数中。 如果下一项输入与转换规范不匹配,则转换失败 – 这是匹配失败。

    注意:

    但是,为了使其更通用,我建议使用fgets()来获取输入,然后使用strtok()来标记输入和使用。

      以上就是c/c++开发分享解析具有多个公共分隔符C的文件相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519464.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐