00:00
我们再来看一个。文件编程的应用实例,那这个应用实例呢,有这么一个要求,就说统计一个文件里面有多少个英文。然后呢,有多少个数字空格和其他字符。就是把这些字符的数量呢做一个统计,OK,好,我们来一起完成它。那我先把这个呢。往下面拖动一下。来,我们完成这个案例。跟着老师思路动起来啊,那现在呢,我们来完成统计这个文件里面的这些字符的一个案例。OK。好地方,为什么卡顿了是吧?哦,有点卡顿。好,把它拿过来。那给他一个标题吧,给他一个标题三。那么我们把这个要求具体的看一下。对不对。好,跟上老师思路。
01:01
那么我们就来做一个代码实现。代码实现。这个是我们这个案例的要求。下面呢是代码的实现。来,我们一起完成。打开withco。那这块呢,我们新建一个案例,对,新建一个文件夹吧,Exe。零七。然后呢,在这里面建一个新的文件。好。把前面这一部分通用的部分拿过来为我所用。粘贴一下,写一个总函数命。包起来往下看。那那我们怎么来做这个事情呢?我们的思路先捋一下我们的思路这样子的啊,首先呢,打开一个文件。打开一个文件对不对,然后创建。创建一个reader。就是带了一个缓存的一个reader,明明白了是吧,创建一个reader,然后呢,每读一行,每读取一行。
02:07
读取一行就便利,就去看看就会,就去统计该行,该行有。该行有多少?多少个这样的数字,哪个呢?就是有多少个英文数字,空格和其他字符。对不对,然后呢,把它保存到一个结构体中。然后。然后将结果保存到保存到一个结构体中。结构体重。所以说呢,我们我们需要先定一个结构体,这个结构体里面里面呢,有这么些字段。比如说统计英文的字段,数字的字段,空格的字段和其他字符的字段,那我们来完成这个事情啊,首先呢,我们定一个结构体。啊定义。
03:03
定义一个结构体用于。用于什么呀,用于。用于保存,保存统计的结果。能理解啊,那现在呢,我们来走一下,首先来一个type。我们把它叫做char。这个count吧,好吧,那么里面有哪些哪些字段呢?首先我们定一个ch count。这个呢是一个int类型,这个用于记录记录这个。字母就是记录英文的个数,能理解啊,那就是记录英文的字,记这个这个这个个数。然后呢,再来一个,我们要统计什么呢?数字number。Number count也是个int,这个用来记录什么呢,数字。
04:01
数字的个数能理解哈,然后呢,我们再来定一个space count,这个呢,用来统计或者叫记录什么呢,空格的这个个数。能理解啊,然后呢,最后有个other。Other countries。这个字段呢,用来记录其他字符。其他其他字符的个数,好的,这就写完了。那有了这个字段过后,呃,有了这个结构体过后呢,我们接着往下看,首先我们打开一个文件。那么我们为了做这个测试呢?我在E盘,各位同学,我在E盘写一个文件叫ABC。Text,然后这里面呢,我写一些字母好吧,AB123好吧,空格,然后呢八九,然后op。对不对,勾换行换行我们再写一些吧,YY,然后八九空格。
05:01
然后呢?呃,这个哈,好可以了,我就做一个这样的测试文件,没问题吧。这个测试文件先把它保存好。那保存好过后呢,我们现在打开这个文件,怎么打开还记得吧,是不是用OS里面有一个函数叫open。应该有印象哈,然后呢,我们把这个文件名写一下。法令等于。E盘下面的ABC.txt没问题吧,把它写到这里来发令写进去,写进去过后呢,这边会拿到一个文件的句柄,还有一个L。对不对?这个我们在前面都已经讲过,就不再多说,我就直接写了。如果这个A不等于尿。说明我们打开这个文件出错了。就说出一句话,Print就是open。Open file error。
06:01
L然后呢,把这个信息说出来。L,好,下面就不用走了,因为文件都打不开,就没有办法统计了,然后呢,各位我们在定义一个结构体实例。第一个count的实例。没问题吧,那实例呢,我们就这样写count,就是VAR。VR count,然后呢,它的类型就是char count看清楚了,那目前当你创建完了之后,里面的这些默认值是不是都是零了。这个在前面已经讲过了,就是如果一个结构体你没有给,没有指定给值的话,它有一个默认值就是零值,那么int类型呢,就是零。好,那有了这个过后,我们打开这个过后呢,不要忘了一件事情,对吧,及时的关闭。Close下。用defer这个关键词,让他这个延时关闭,延时关闭好,那有了这个东西过后呢,我们现在来得到创建一个reader。
07:11
还记得这个reader吧?这个reader呢,是带buffer的。是带buffer的,那我就用它点一个六一个reader,点六一个reader。那我把这个句柄放进去是不是好,它也会,它会返回一个什么呀,它会返回一个reader。没问题吧,现在呢,我就开始。开始循环的。开始循环。循环的读取什么呀,这个文件内容就是这个文件内容。那么怎怎么读取这个文件内容,前面我们是不是讲过呀,内容那就for循环。好,我们开始读取了,用这个read呢,它有一个方法叫read read read soon。
08:02
是不是READ10寸,我们给他一个终止符叫斜杠N,因为他斜杠N呢,刚好就是换行嘛,对不对,那我这边就拿到它的这个内容了,String。拿到这个内容,同时它会有一个A。就是如果读到最后呢,我们就不再读了,判断一下,如果L等于了IO里面的这个常量。这个代表文件的末尾,就是读到ABC.txt文件末尾呢,我们就怎么样,就不读了,就break。是这意思吧,然后如果没有读到末尾呢,我们继续读,那么这个时候这个十寸。注意,这个尺寸就是我们读到的这个字符串,我们现在就可以遍历它好的。我们来遍历一下。便利。便利哪一个呢,这个。进行这个统计。
09:01
进行统计好,那么便利的时候我用for循环啊for,那么下面这个下标我不关心,我关心的是这个值。对吧。Range对谁呀?对这个进行一个便利。呃,它是一个字符串嘛,字串也可以作为一个,呃,字符串的本质其实一个bit数组,所以说可以便利的对吧。OK,没有问题,那么我最大便利一下,我们先先来看看能不能把它打印出来。Print。艾伦。我们先看看能不能打印出来啊,朋友们好,先把这个V输出来,看看结果是什么。好,这个遍历完了过后,他不停的读,不停的读,最后呢,读到文件末尾就跳出来了,对吧,跳出来过后呢,我们在这。我们先看看这个能不能能不能把东西拿到跑一下先。哪有问题?这。好的,还有什么呀。还有这个。
10:00
没有用,他说这个没有用,先暂时。不用它啊。还有什么问题没有?好像没有报错了是吧。没有报错了,好,没有报错,我们先运行一下看CD,点点CD到EXE07了。DR。是我们刚才写的吧,Go让命顶,Go抛。我们可以看到现在呢,已经把这个统计出来,其实因为它是一个bit数组嘛。它是一个BA数组,所以说你看这里面就会把这个数字打出来,对不对,好,那就相当于拿到了,那拿到过后呢,我们就开始进行统计,那用Switch语句。来Switch对谁啊?对这个V进行统计,好case一下,如果,如果这个V,注意听,如果这个V大于等于A,因为你在进行比较的时候呢,它会变成一个数字,就是对这个字符进行比较的时候,它会比较它们对应的阿克码,对吧,如果要大于。
11:03
这个大于等于A,并且。这个V小于等于这个大这个Z,因为我们字母呢,就是A到Z嘛,如果在这个范围里面。如果在这个范围里面怎么办?我们就让这个count。好把它打开了。把这个count里面的哪个子进加加。就是点。它这里面的count加加。加一嘛,相当于对不对,加加可以了,当然如果这个V我就粘贴一份吧。如果这个V它大于A,大写的A小于这个大写的Z,那么也加加,大家看这样子的话呢,各位同学这样子的话,其实我们完全可以把这个地方做一个穿透。穿透处理是吧,用过for输入。
12:02
ROO。UGHT。是不是有有个输入啊,这个输入是个关键字,就是如果是V是在A到Z之间,那么就加加,在大写的A到C之间也加加,这是个穿透,是不是以前讲过。穿透处理。好的,那接着往下走,如果这个case。V它是等于这个空格。这种空格或者。或者这个V等于什么呢?它等于这个空格。就是我们一个table键斜杠T,斜杠T是不是一个也是一个转移符,就是我们的那个制表符对吧,如果他是这样的话呢,我们把谁加加一下。就是这个count的另外一个值哪个呢。就是配。
13:00
SPA。Count,加加。对不对,好,还有一种情况。就是它如果是个数字的话,我们也要进行处理,如果它是大于等于这个零。对不对,或者并且啊,并且注意。并且这个V小于等于这个九。那说明我们这个字符是个什么,它是一个数字,于是乎呢,我们把这个number。C加加。对不对,好,最后一种情况default。如果嗯不属于这里面的情况呢,我们认为它就是一个其他的字符。比如说是个中文呢,或者一个其他的什么东西,对不对,特殊字符等等,我们就。把这个other加加就可以了。好的,那经过这一番这个循环。每读一行,每读一行我们就去处理一次,每读一行处理一次,那最后我们就把它统计出来了,是不是最后他读到最后最后呢,就负循环就结束了,就说读到文件的末尾。
14:08
读到。读到文件末尾,末尾就退出。末尾就退出了。好的,那波循环完了,我们把它输出这个结果,我们输出结果看一看。输出统计的结果。结果,看看是否正确。来吧,嗯,我就直接输出了好吧,Print。那用个。格式化一个东西吧,格式化。那么我们说一下这个字符,字符的个数为等于百分之好吧,然后数字的个数。个数为多少呢?百分V,然后呢,还有空格的。空格的个数为。
15:00
等于百分之好。最后其他字符。其他字符。个数。个数。那么也来一个百分VOK,好,这写完了过后,我们换一行换一行,我把它输出来啊,那就应该是这样写的,第一个是字符个数。那就是count这个值。对吧,然后呢,它的数字的个数。是不是他呀。就是count里面的number count,还有空格的个数是不是就是count count?好,还有一个其他字符。对吧,其他字符。好,这个就写完了,写完那我们来运行一下,看看这个代码怎么样啊。我们来跑一下。保存一下,看代码有没有错误。我们可以看到这有两个错误,我们找一下错误在哪里。定一下位。啊,他说这个地方有问题。
16:03
哦,这是不是少了冒号。这少了么好。还有你没有?好,这边还有问题啊。看问题在哪里。看一下。二不匹配部位类型。And rain,哦,大家可以看到啊,嗯。他是这样一个情况,就是因为它是一个布尔类型。所以说我们这样去处理呢,会有一些问题。你这会儿返回一个布尔类型,但是你这个V不是一个布尔类型,对不对,所以说这个地方呢,我们不要这么去处理,我们换一个思路,换一个什么思路呢?其实也很简单,稍微的修改一下就可以了。稍微修改到哪里,这个V直接拿掉就可以了,对不对,是不是这意思啊,就说我根本不用这个V去匹配,就是相当于把这个Switch当做一个if这个分支判断就完了,就是说case我这不要这个这个这个字符来匹配,大家还记得Switch有这种用法,就是说直接把这个Switch呢,当做一个分支结构来使用就可以了,对吧,没问题吧,好的,那现在呢,我们来运行一把。
17:16
好的,那现在呢,我们直接让。好,我们可以看到结果,我们可以看到结果,同学们看一下,他说。呃,字符有13个,数字有七个,空格有两啊,其他字符有四个,我们看看对不对啊,同学们打开我们的文件,我们来比较一下。哦,这个这个不是我们的文件,我们是放在E盘的,对不对,打开它lawyer。啊,我们看对不对,首先呢,他说字符的个数有13个,看一下。呃。一个两个三个四个五个六呃六个这这前面这14个,再加上前面两个六个七个八个九个十个11 12 13完全正确数字的个数有七个123。
18:07
4567也是正确的,空格有两个,空格有两个,这一个空格看到没有,这还有一个空格,那么其他字符为什么有四个呢?大家知道我们这个地方其实有一个斜杠。注意啊,这样其实有一个你看不到的字符,就什么呢?C-RC-N还记得吧,这个是看不到的,因为它是回车换行嘛,所以说这两这边有两个,这边也有两个明白吧,所以说其他字符还有四个。完全是正确的,没有任何问题,因为你这有换行啊,换行我们知道这个记事本呢,它的回收换行有斜杠R,斜杠N,把这两个算进去就刚好是四个,对不对,所以说其他字符四个好,同学们,那么这个题呢,我们就把它做完了,大家看一下能不能理解。能不能理解啊?同学们可以在这个基础上做的更完善一点,比如说把这个中文有多少个加进去,对不对,可以做的更好,比如说我要统计大写字母有多少个,小写字母有多少,有多少个,也可以在这个基础上进行一个完善。
19:13
好,同学们,我把这个代码的实现呢,给大家放到笔记里面去板述一下。干湿。好差一个内容。没问题吧?好,同学们把这段代码,把这个题呢,好好的理解一下啊,好好理解一下我们思路是什么样子的,尤其是思路。你一定要想到,当我们做一个题的时候呢,你的思路很重要,我们的思路其实很简单,怎么做的呀,就是用一个结构体来记录这些统计的结果,然后呢,打开这个文件,每读取一行就去遍历一次,每读取一行就去遍历一次,最后把这个结果拿到。把这个结果拿到,OK,那在这我再多说一句啊,再多说一句,因为这个施政呢。
20:03
这个十寸这样统计的话呢,他不能处理中文,所以说有些时候呢,你会看到有人这么去做一个处理也是可以的,怎么处理呢。这样处理。大家看,嗯,有些人喜欢这样,这样干一下就是。为了处理中文或者兼容中文。兼容中文字符。那么可以。可以将什么呢?可以将这个string转成这个这样的一个切片,就是R切片,这个这个R呢,它可以兼容中文,以前我讲过,那怎么转呢,很简单。其实很简单,就这样写就完了。是最。对于。RA。17。对吧,就是把它转一下就OK了。这样子。
21:00
没问题吧?这大家应该有有一个印象对不对,应该有一个印象,好,那这样子的话呢,就可以兼容中文了,就是相当于把这个string转成一个rain,这个切片二写错了。这样子。对吧,这样才对啊,转成这个rain这个切片,然后呢,交给他,对他进行一个遍利,这个时候有中文的话,也可以把它统计和处理出来啊,把中文也可以进行一个处理好,那关于这个知识点呢,我们就先给同学们讲到这里,大家把它消化一下。
我来说两句