用C语言读取特定格式的文件

用C语言读取特定格式的文件,c,C,我想读一个C语言的文本文件,我想对这个文件执行搜索。这是文本文件的内容: 编辑:原始格式看起来有点不同,因为文件中没有换行符。它已被重新格式化以删除文本字符串之间的空白,并通过80col屏幕的多列程序进行过滤 ^%1~3~31225~2999 ^%1~8~33983~5304 ~MAC100 ~MAC100 ~RAJU ~LATHA CHERIAN CR

我想读一个C语言的文本文件,我想对这个文件执行搜索。这是文本文件的内容:

编辑:原始格式看起来有点不同,因为文件中没有换行符。它已被重新格式化以删除文本字符串之间的空白,并通过80col屏幕的多列程序进行过滤

^%1~3~31225~2999              ^%1~8~33983~5304
~MAC100                      ~MAC100
~RAJU                        ~LATHA CHERIAN
CR                           ~ELIM VILLA
~CHEMPOLA                    ~1
~VT : 2999                   ~9847569922
~9847569922                  ~32166
~29408                       ~Message for bill gro~1960.0
~Message for bill gro~750.0  ~160.0
~250.0                       ~0.0
~0.0                         ~1~scheme name
~1~scheme name               ~0
~0                           ~June
~June                        ~VA019_95784~-
~VA019_93159~-               ~0.0
~0.0                         ~0~amc date 1~amc date 2~990
~1~amc date 1~amc date 2~990 ~15.0
~15.0                        ~150.0
~150.0                       ~narration
~narration                   ^%1~9~31588~3235
^%1~5~30882~2496             ~MAC100
~MAC100                      ~BABU
~VISWAMPARAN T. P.           ~NADUMPARMBIL
~THALAKOTTUCHALIL            ~0
~C 4771                      ~9847569922
~9847569922                  ~29771
~29065                       ~Message for bill gro~3304.0
~Message for bill gro~4320.0 ~160.0
~160.0                       ~0.0
~0.0                         ~1~scheme name
~1~scheme name               ~0
~0                           ~June
~June                        ~VA019_93516~-
~VA019_92833~-               ~0.0
~0.0                         ~0~amc date 1~amc date 2~990
~0~amc date 1~amc date 2~990 ~15.0
~15.0                        ~150.0
~150.0                       ~narration
~narration                   ^? 

这是计费系统格式的数据库。我想在这个文件中使用一个通用的搜索函数,它基于名称和id,即^%1~9~**31588**~3235,这里是31588。这是档案。每条记录都以^%1开头。~用于分隔每条记录的列值。第一个和最后一个字符不需要^每个记录中的%1个和^?文件的最后一部分。请帮我做这件事。

您首先应该定义或准确理解您的输入格式可能的和禁止的字符是什么,可能使用一些EBNF符号


然后,您可以使用fgets或getline逐行处理您的输入,并使用sscanf或strtol单独解析每一行,以及额外的手动解析

使用fgets逐行读取,然后基于~,使用strtok标记化。希望可以

您确定这是纯文本文件吗?请描述您的记录格式。嗯,用c,好的。你想要的是一个简单的c文本读取器,它可以把你的列读入一个记录结构。如果我们知道这些记录的类型会有所帮助。例如整数、浮点、字符串等等。字符串中是否有禁止的字符,比如%1~3~31225~2999~MAC100~RAJU CR~CHEMPOLA~VT:2999~9847569922~29408~比尔·格罗的消息~750.0~250.0~0.0~1~方案名称~0~六月~VA019~u 93159~-~0.0~1~资产管理委员会日期1~资产管理委员会日期2~990~15.0~150.0~这是我的实际文件格式。我的文件中有一条2记录。没有这样的换行符。记录由^%1分隔