c语言提取文件的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言提取文件的值相关的知识,希望对你有一定的参考价值。

a = 123
b=234
c = 345
d = 679
a,b,c的值

参考技术A 其实这事和操作系统没什么关系,你大概是想通过标准c把文件中的值读出来吧。文件中每行等式内变量名都是一个小写字母,但其中空格的位置和数量还不一定。是这样吗?
如果理解错了,那请你再补充一下。尤其变量名是否只是一个小写字母很关键。

这类问题一般有两种方法解决。
一种是直接利用格式化输入,另一种是自己做状态机一个个字符读入并分析。
下面的程序利用了格式化输入(fscanf),你可以参考一下。

#include <stdio.h>
int main()
int num;
char ch;
FILE *fi=fopen("a.txt","r");
if(fi==NULL)
return 1;

while(fscanf(fi,"%c",&ch)==1)
//判断输入是否是小写字母
if(ch>='a' && ch<='z')
//清掉等号及前面的空格
fscanf(fi,"%*[^=]%*c");
//读入数值
fscanf(fi,"%d",&num);
//输出变量名,数值
printf("%c %d\n",ch,num);


return 0;

如何使用 php 从大文本文件中提取包含信息的值

【中文标题】如何使用 php 从大文本文件中提取包含信息的值【英文标题】:How can I Extract values with information from big text file using php 【发布时间】:2021-04-08 15:08:37 【问题描述】:

我正在尝试从文本文件中获取一些数据,这些数据在每行随机重复一次

我正在尝试从文本文件中获取它,并且有很多 2/6 块。我需要使用 aloop 来获取它们。

我需要获取的示例数据

流量测量报告第 2 部分/ 6 VLR 测量 VLRMEAS 样品日期:从 2020-10-22 14:00:00:09 至 2020-10-22 15:00:00:13 注册用户: 位置 区域代码 当前平均 TMS1 TMS2 TMS3 未知 LAC 2 2 0 0 0 113 75868 75749 0 0 0 115 40627 40732 0 0 0 1102 70422 70489 0 0 0 1105 87075 87067 0 0 0 1117 56150 56180 0 0 0 1118 67175 67444 0 0 0 1120 74385 74381 0 0 0 1121 65034 65060 0 0 0 1122 21636 21407 0 0 0 1217 22944 22856 0 0 0 1218 49054 48993 0 0 0 1318 24283 24066 0 0 0 1418 16366 16350 0 0 0 2118 17812 17674 0 0 0 2120 79644 79489 0 0 0 合计 768477 767939 0 0 0 第 2 部分/第 6 部分 报告结束

来自大文件(1/6 ,3/6 等)。

我试过这样做

    $lines = file($file,FILE_IGNORE_NEW_LINES);
    foreach ($lines as $line)
     if(strstr($line,'2/    6'))
         echo $line .'<br>';
     elseif (preg_match('/(\w+)\s+(\d\end\:\report\d)\s+-->/', $line, $match))
         print_r($match);
     
    

我从每个块中只得到一行

流量测量报告第 2 部分/ 6 VLR 测量 VLRMEAS 第 2 部分/第 6 部分 流量测量报告第 2 部分/ 6 VLR 测量 VLRMEAS 第 2 部分/第 6 部分 流量测量报告第 2 部分/ 6 VLR 测量 VLRMEAS 第 2 部分/第 6 部分 流量测量报告第 2 部分/ 6 VLR 测量 VLRMEAS 第 2 部分/第 6 部分

我希望你能让我好起来,我试图找到任何答案,但我找不到我想要的。

【问题讨论】:

【参考方案1】:

一种选择是使用preg_match_all 和file_get_contents 以及如下模式:

^.*\d/\h*\d.*(?:\R.*)*?\REND OF REPORT\b

或者使用模式中的确切数字

^.*2/\h*6.*(?:\R.*)*?\REND OF REPORT\b
^ 字符串开始 .*\d/\h*\d.* 匹配一行和一个数字 / 可选空格和一个数字,然后是该行的其余部分 (?:\R.*)*? 尽可能少地重复行 \R 匹配换行符 END OF REPORT\b 匹配 END OF REPORT 和单词边界以防止部分单词匹配

Regex demo | Php demo

$file = "myfile.txt";
$str = file_get_contents($file);
$re = '`^.*\d/\h*\d.*(?:\R.*)*?\REND OF REPORT\b`m';
preg_match_all($re, $str, $matches);
print_r($matches[0]);

输出将是一个包含所有匹配部分的数组。


或其他变体:

^.*\d/\h*\d.*(?:\R(?!END OF REPORT).*)*\REND OF REPORT\b

Regex demo

【讨论】:

它很完美,但直到获得其他数据,例如 1/6 和 3/6 块,我只需要文本文件中的 2/6 块 @user15584147 然后你可以使用模式中的数字^.*2/\h*6.*(?:\R.*)*?\REND OF REPORT\b 见regex101.com/r/E6NOKw/1 非常感谢,它可以工作,但需要设置样式,都在一行中。 样式是什么意思? 没关系,我会做的,非常感谢

以上是关于c语言提取文件的值的主要内容,如果未能解决你的问题,请参考以下文章

C语言编写一个程序从特定的文件中提取特定的字符串。

c语言中如何提取二进制数中的某一位?

C语言,怎么在另一个程序中提取数据?

http协议解析 请求行的信息怎么提取 c语言源码

wav音频文件解析读取 定点转浮点分析 幅值提取(C语言实现)

C语言如何将链表里的值写入文件