文本文件I / O

247(30天)
asad落下
asad落下 2019年4月20日
编辑: 1月 2023年1月19日
编写一个函数 char_counter 计数一定数量的字符在文本文件中。函数有两个输入参数, ,一个字符的文件名和向量 字符 文件中,字符数。函数返回 charnum ,发现的字符数。如果文件没有找到 字符 不是一个有效字符,函数返回1。作为一个例子,考虑下面的运行。“简单的文件。txt”包含一行:“这个文件应该有三的……”
charnum = char_counter (“simple.txt”,“一个”)
charnum =
3
函数charnum = char_counter(帧,字符)
fid = fopen(帧);
如果fid < 0
charnum = 1;
返回;
结束
如果比较字符串(字符,)= = 1
charnum = 0;
返回;
结束
如果双(字符)> = 35 & &双(字符)< = 43 & &双(字符)~ = 39 & &双(字符)~ = & &双(字符)~ 41 = 40
charnum = 0;
返回;
结束
如果双(字符)> = 60 & &双(字符)< = 64 & &(字符)~ = 63的两倍
charnum = 0;
返回;
结束
如果双(字符)= = 81 | |双(字符)= = 88 | |双(字符)= = 90
charnum = 0;
返回;
结束
cc = fgets (fid);
sumv = 0;
ischar (cc)
z = sprintf (' % s ',cc);
k = strfind (z,字符);
sumv = sumv +长度(k);
cc = fgets (fid);
结束
charnum = sumv;
如果charnum = = 0
charnum = 1;
返回;
结束
你们能告诉这段代码有什么问题吗?
4评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年7月15日
代码是否fopen(),但没有fclose(),所以 有一个错误。

登录置评。

答案(17)

林嘉绮刘
林嘉绮刘 2019年9月3日
函数charnum = char_counter(框架、字符)
fid = fopen(框架,“r”);
如果fid < 0
charnum = 1;
返回
结束
如果ischar(字符)= = 0
charnum = 1;
返回
结束
所寄物品= fscanf (fid,“% c”);
charnum = count(内容、人物);
结束
2的评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年9月15日
fscanf()没有计数问MATLAB文件中读取尽可能仍然匹配给定的格式。给出的格式是% c,匹配任何一个角色,因为每个字节存储在文件可以解释为一个字符,结果用fscanf % c的格式,没有数,是整个余下的文件读取一个字符。
…有一天我应该测试R2020a或之后,和字节流,不代表有效UTF8, % c是否会停止阅读这一点……

登录置评。


默罕默德Sadiq
默罕默德Sadiq 2020年5月7日
编辑:默罕默德Sadiq 2020年5月7日
函数charnum = char_counter(框架、字符)
fid = fopen(框架,“r”);
如果fid < 0
charnum = 1;
返回
结束
如果ischar(字符)= = 0
charnum = 1;
返回
结束
所寄物品= fscanf (fid,“% c”);
charnum = count(内容、人物);
结束
3评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年12月30日
这段代码在任何情况下不能fclose (fid)。

登录置评。


Fazlul Haque
Fazlul Haque 2020年5月15日
完成与fgets和while循环
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年5月15日
如果文件是有效的但是charv不是一个人物,然后你把文件打开当你回来。
我们不推荐使用 总和 作为一个变量的名字:它是 非常 普遍感到困惑,也想使用sum()的名称求和函数在相同的代码 总和 作为一个变量。

登录置评。


阿卡什Dengwani
阿卡什Dengwani 2020年12月24日
函数水资源charnum = char_counter(帧)
fid = fopen(帧,“rt”);
如果fid < 0
charnum = 1;
返回
结束
行= fgets (fid);
苏= 0;
ischar(线)
lo = = =水资源;
苏苏= +总和(lo (:));
行= fgets (fid);
结束
如果双(水资源)> 127 | |双(水资源)< 0 | | ~ ischar(水资源);
charnum = 1;
其他的
charnum =苏;
结束
结束
4评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年9月2日
从文件中读()* char和正的大小会导致从文件中读()返回一个包含所有剩余字符的特征向量文件。那些将被存储在变量命名
特征向量(大多数情况下)作为16位整数的数组存储unicode代码点。Unicode是一个国际标准,给出了一个具体的订购大量的字符和符号; https://home.unicode.org/ 。例如字符“A”是存储为16位整数价值65。他们真的是数字内部(连同一个国旗,表示数值代表人物。)
= =操作符是平等测试操作符。在这种背景下,= =用于比较字符编码(整数)用于表示中的数据 变量,用于表示的字符代码存储在的角色 水资源 这是一个字符。所以内部有一个数值向量(“行”)相比,数字标量(“水资源”)。比较一个矢量和标量的结果是由MATLAB是一个逻辑矢量,定义的值 每个地方比较失败的 真正的 每个地方的比较成功。所以= =是一个逻辑的输出向量长度相同的变量
点之后你需要知道什么是逻辑 由数值表示0,和逻辑 真正的 由数值1表示。正因为如此,当你想知道有多少位置比较举行,你可以()和矢量,贡献1为每个之和 真正的 最后的结果将是地方比较的数量是真实的。
那么将会存储在 是地方的数量一个字符变量 字符变量是一样吗 水资源

登录置评。


Pranav Mishra
Pranav Mishra 2020年6月8日
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“rt”);
如果(fid < 0)
charnum = 1;
返回;
结束
如果(ischar(字符)= = 0)
charnum = 1;
其他的
c = 0;
oneline = fgets (fid);
ischar (oneline)
character_line = char (oneline);
[b] =大小(strfind (character_line、性格));
c = c + b;
oneline = fgets (fid);
结束
charnum = c;
结束
文件关闭(fid);
结束
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年6月8日
注意,结果fgets()已经是一个特征向量(除非文件结束),所以您不需要使用char oneline ()。

登录置评。


哈里Kiran Tirumaladasu
哈里Kiran Tirumaladasu 2020年6月21日
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“r”);
如果fid < 0 | | ischar(字符)= = 0
charnum = 1;
错误(输入的文件是不正确的或输入一个字符不能被发现的);
返回;
结束
incount = fscanf (fid,“% c”);
charnum = count (incount字符);

Adityesh Satam
Adityesh Satam 2020年7月23日
我能得到所有正确的使用这段代码:
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“rt”);
charnum = 0;
2 = 0;
如果fid < 0
charnum = 1;
返回;
结束
如果ischar(字符)= = 0
charnum = 1;
结束
%阅读文件一次一行
one_line = fgets (fid);
ischar (one_line)
2 = 1:长度(one_line)
如果比较字符串(one_line (ii),字符)& & ischar(字符)
charnum = charnum + 1;
结束
结束
one_line = fgets (fid);
结束
文件关闭(fid);
结束
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年7月23日
如果字符参数不是一个有效的参数,你继续读文件不管怎样,但每一次测试 再一次 ischar(字符)是正确的。这是一个浪费时间。如果ischar(字符)是假的,那么就不要去读文件。

登录置评。


沃尔特·罗伯森
沃尔特·罗伯森 2019年4月20日
我们已经解释道。如果你传递一些角色,但这个角色在文件中没有找到然后你不需要返回0 1。只返回1,如果文件不存在或你传递的不是字符数据类型。
2的评论
沃尔特·罗伯森
沃尔特·罗伯森 2019年4月20日
行33。

登录置评。


奥雅纳Kumar Debnath
奥雅纳Kumar Debnath 2020年6月1日
我试图回答这个问题。但我困在那里,任何一个能帮我找到代码中的错误吗?
免责声明=我是一个新手。
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“rt”);
如果fid < 0
错误(“打开文件错误\ n”);
charnum = 1;
返回;
结束
总= fgets (fid);
2 = 1;
大小=(总);
charnum = 0;
二世< =
如果(2)= =“性格”;
charnum = charnum + 1;
其他的
2 = 2 + 1;
结束
结束
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年6月1日
编辑:沃尔特·罗伯森 2020年6月1日
你不验证第二个输入一个字符。
你是比较文字字符的输入向量[' c ' ' h ' ' ' ' r ' ' ' ' c ' ' t ' ' e ' ' r '],而不是输入变量的命名字符。
你不是递增二世如果比较是真的。

登录置评。


沙辛格
沙辛格 2020年6月7日
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“r”);
如果fid < 0 | | ischar(字符)= = 0
charnum = 1;
返回
结束
所寄物品= fscanf (fid,“% c”);
charnum = count(内容、人物);
结束
3评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年2月20日
返回 遇到,MATLAB函数,回到这个地方叫做一模一样如果MATLAB函数的结束。它不执行任何更多的代码的功能。
在辛格沙发布的代码,如果 返回 没有去过,之后charnum被分配1,代码之后继续吗 如果 ,所以代码将尝试fscanf ()。但如果支撑材是< 0指示文件不能被打开,然后fscanf (fid)将是一个错误,函数会崩溃。
总是有可能重写代码使用 返回 不使用 返回 ,但它可以是混乱的。在上面的代码中可以写成
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“r”);
如果fid < 0 | | ischar(字符)= = 0
charnum = 1;
其他的
所寄物品= fscanf (fid,“% c”);
charnum = count(内容、人物);
结束
结束
在这种情况下这是不坏。但考虑适当的检查ischar ():
函数charnum = char_counter(帧,字符)
如果ischar(字符)= = 0
charnum = 1;
其他的
fid = fopen(帧,“r”);
如果fid < 0
charnum = 1;
其他的
所寄物品= fscanf (fid,“% c”);
charnum = count(内容、人物);
结束
结束
结束
和比较,相同的回报:
函数charnum = char_counter(帧,字符)
如果ischar(字符)= = 0
charnum = 1;
返回
结束
fid = fopen(帧,“r”);
如果fid < 0
charnum = 1;
返回
结束
所寄物品= fscanf (fid,“% c”);
charnum = count(内容、人物);
结束
请注意,使用 返回 更紧凑的代码,不需要尽可能多的if / else水平。

登录置评。


Ujjawal Barnwal
Ujjawal Barnwal 2020年6月8日
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“rt”);
charnum = 0;
如果fid < 0 | | ~ ischar(字符)
charnum = 1;
返回;
结束
oneline = fgets (fid);
ischar (oneline)
长度=(中(oneline,字符));
charnum = charnum +一个;
oneline = fgets (fid);
结束
文件关闭(fid);
结束
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年6月12日
如果帧是有效的 字符 不是一个人物,那么你离开打开该文件,当你回来。

登录置评。


萨钦Patare
萨钦Patare 2020年9月27日
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“rt”);
如果fid < 0
charnum = 1;
返回
结束
x = fileread(帧);
如果ischar(字符)= = 1
一个=中(x,字符);
b =大小(一个);
charnum = b (1、2);
其他的
charnum = 1;
结束
3评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年9月28日
测试的一个优势fopen()在测试文件存在与存在,是顺利fopen()将会失败如果文件存在但你没有权限阅读它,或者是文件存在但锁定所以你不能读它。在这些情况下,fileread()将产生一个异常,必须处理一个try / catch复制fopen()能够检测到文件无法读取。

登录置评。


Sumanth Bayya
Sumanth Bayya 2021年10月19日
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“rt”);
charnum = 0;
2 = 0;
如果fid < 0
charnum = 1;
返回
结束
如果ischar(字符)= = 0
charnum = 1;
结束
one_line = fgets (fid);
ischar (one_line)
2 = 1:长度(one_line)
如果比较字符串(one_line (ii),字符)& & ischar(字符)
charnum = charnum + 1;
结束
结束
one_line = fgets (fid);
结束
文件关闭(fid);
结束
4评论
1月
1月 2021年10月20日
编辑:1月 2021年10月20日
%我明白了。谢谢你,沃尔特

登录置评。


Milad Mehrnia
Milad Mehrnia 2021年11月1日
函数charnum = char_counter(帧,c)
fid = fopen(帧,“rt”);
charnum = 0;
如果~ ischar (c)
charnum = 1;
elseiffid < 0
charnum = 1;
其他的
行= fgets (fid);
ischar(线)
i = 1:长度(线)
如果(我)= = c
charnum = charnum + 1;
结束
结束
行= fgets (fid);
结束
文件关闭(fid);
结束
结束
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年11月1日
如果文件存在并且是可读的,但用户输入的东西不是一个字符为第二个参数,然后你打开文件但不关闭它。

登录置评。


Duong阮
Duong阮 2022年3月13日
编辑:Duong阮 2022年3月13日
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“rt”);
charnum = 0;
如果fid < 0 | | ~ (ischar(字符))
charnum = 1;
返回
结束
%如果你不使用“返回”下面的while循环将分配charnum = 0;
oneline = fgets (fid);
ischar (oneline)
[~,临时]=大小(strfind (oneline、性格));
charnum = charnum +温度;
oneline = fgets (fid);
结束
文件关闭(fid);
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2022年3月13日
如果文件存在并且是可读的,但用户输入的东西不是一个字符为第二个参数,然后你打开文件但不关闭它。

登录置评。


齐亚•拉赫曼
齐亚•拉赫曼 2022年9月1日
嗨,伙计们,
请检查我的代码,并建议我是否可以改善
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“rt”);%打开名为(帧)的文本文件读取(rt)
如果fid < 0 | | ~ ischar(字符)%检查文件的存在和检查如果char_counter的第二个参数是有效的字符
%流(“打开文件错误% s \ n \ n”,帧);
charnum = 1;
返回;
结束
charnum = 0;
oneline = fgets (fid);%读取第一行使用fgets”
ischar (oneline)
i = 1:长度(oneline)%的循环遍历每个char
b = strcmp (oneline(我),字符);%比较i char和第二参数(字符)
如果b
charnum = charnum + 1;%如果我们发现char然后加1
结束
结束
oneline = fgets (fid);%读下一行,回到在线
结束
文件关闭(fid);%关闭文件
结束
6个评论
齐亚•拉赫曼
齐亚•拉赫曼 2022年9月4日
好吧好吧,我将试试这个,非常感谢

登录置评。


Rahim Ullah
Rahim Ullah 2023年1月18日
你的代码看起来冗长而复杂,请试试这个
函数charnum = char_counter(帧,字符)
fid = fopen(帧,“rt”);%文件打开
如果fid < 0%检查文件是否正确与否
流(的文件不能打开)
charnum = 1;%,以防文件没有打开由于任何原因
返回
结束
file_content = fileread(帧);%读取文件内容并将其存储为字符串
charnum = sum (file_content = =字符);%和所有匹配的字符在字符串中找到
如果ischar(字符)= = 0%检查有效的字符
charnum = 1;
返回
结束
5个评论
1月
1月 2023年1月19日
编辑:1月 2023年1月19日
@Rahim Ullah :你的答案是一个有效的贡献有关Matlab和不违反政策。因此,编辑不会删除它。
我插入一个 fclose (fid) 或使用 isfile () 代替。但这是你的贡献。随意做的,你喜欢什么。

登录置评。

类别

找到更多的在数据导入和导出帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!