紫猫插件-文件读写(1-13)

QM[zm]05.01 文件读写之读取乱码文件(VIP)

小知识:了解下base64编码(功能就目前而言只是让内容无法直接读取 还有一个常用用处是可以把图片的二进制流base64编码 把图片作为字符串来传输 实际上稍微懂一点这方面的知识的很容易看到真实的内容)

举个例子 比如迅雷下载地址

image

我们把第一行的字符串进行base64解码 得到的结果是

image

很明显 迅雷对下载地址进行了保护 算法无非就是 给真正的下载地址左侧加AA右侧加ZZ 然后整体bse64加密 得到了我们看到的迅雷下载地址

顺便说一下 我们平时在网页上增加图片链接 一般是这样<img src=“http://www.letuknowit.com/images/wg.png”/>  这样的话 每次打开这个网页 网页还要分出资源加载各种图片  如果我们把图片的二进制流直接base64处理 就相当于 我们把这个图像直接放到了网页上 图片本体就是在网页上 根本不需要加载  例如这样

image这种图片格式 网页是支持的 所以不用担心

顺便附上 base64图片转化地址  自己测试就好http://imgbase64.duoshitong.com/


base64的详细资料 https://blog.csdn.net/goodlixueyong/article/details/52132250

base64在图片领域的使用 https://www.aimks.com/css-path-data-image-png-usage-base64.html


小知识:这节课主要是简单介绍了下 中文乱码出现原因

电脑上的txt默认编码为ansi 但是呢 手机上的txt默认编码为utf8  ansi包含的是英文符号和基础字符 但是不包含中文

解决办法:用紫猫插件的文件读写函数 编码参数为电脑就可以 但是注意 当前txt的编码格式必须为ansi 编码参数才能用 电脑 值 还有另外一个办法 把txt的编码格式转化为utf8保存下 就什么屁事也没有了

小知识:zm.readfile()函数 

用法和默认的readfile基本一样 只是多了一个参数  zm.readfile(path,”电脑”) 第二个参数为电脑 则它认为txt是ansi编码  注意 当前txt的编码格式必须为ansi 编码参数才能用 电脑

image

源码:结果:

image

QM[zm]05.02 文件读写之解决开头问号字符(VIP)

小知识:为什么txt第一位有的时候出现一个问号 其实就是普通的txt文件会自带一个bom头 但是到了手机下 手机无法识别这个bom头 只能呈现一个问号

解决办法:

1.我原来的处理办法如下  核心思路无非就是把bom头的3个字符替换为空就解决了 bom头的3个字符就是Chr(239) & Chr(187) & Chr(191),  老师是视频里面的代码也是这样

Function 文本文件格式化操作(文件路径)
    Dim 读取内容
    读取内容 = Trim(file.Read(文件路径))    
    //判断开头3个字符是否是bom头
    If Mid(读取内容, 1, 3) = Chr(239) & Chr(187) & Chr(191) Then 
        //有则替换为空 然后重新写入内容 这个地方不确定是否除了第一行之外还可能存在bom头 应该没那么巧
        file.Write 文件路径, Replace(读取内容, Chr(239) & Chr(187) & Chr(191), "")
    End If    
    //如果txt里面最后不是以\r\n结尾的 就自动添加一个回车换行符 来实现这个 也解决了替换最后一行 不写\r\n会替换找不到的情况
    If trim(读取内容)<>""and Right(读取内容, 2) <> "\r\n" Then 
        file.Write 文件路径, 读取内容 & "\r\n"
    End If    
End Function

2.直接用老师的紫猫插件的文件读取的函数 就可以自动过滤掉这些东西(推荐)

image

QM[zm]05.03 文件读写之读取帐号密码(VIP)


主要是讲解zm.FileReadForm( 用法 这个比较省事 可以直接把账号密码的若干信息直接分割好  不需要我们分割2次

源码如下

Import "zm.luae"
zm.Init 

Dim 账号文件路径="/sdcard/Pictures/账号.txt"
Dim 读取结果表=zm.FileReadForm(账号文件路径,"---","电脑")
TracePrint zm.VarInfo(读取结果表)
//遍历这个表
For i = 0 To UBOUND(读取结果表)
    TracePrint "账号:["&读取结果表(i,0)&"],密码:["&读取结果表(i,1)&"],状态{"&读取结果表(i,2)&"}"
    //TracePrint zm.VarInfo(读取结果表[i])
    //TracePrint 读取结果表[i][0]
Next

结果

image

原始的文件内容

image

注意

1.按键里面table二维表的调用自身的元素是这样的形势 tablename(0,1) 而不是tablename[0][1] 推荐以后都用这个 能节约3行代码 而且自带去掉bom头 自适应编码等优点

2.表的数字索引从0开始

QM[zm]05.04 文件读写之读取表格文本(VIP)

没有什么特殊的 还是继续讲解的zm.FileReadForm

zm.FileInit()----》参数是个表

zm.FileInit {"encode":"电脑"}

QM[zm]05.05 文件读写之按行读取(VIP)(好无聊 直接看文档即可)

zm.FileReadLines(path,“电脑”)用法基本和官方一致 无话可说


结果 = zm.FileReadLine(文本路径, 指定行[, 文件编码])  (平时不大用)

命令参数:
文件路径: 字符串, 要操作的文件路径
指定行: 数值型, 表示读取第几行内容, 负数为倒数第几行内容  有点意思
文件编码: 字符串, 可选, 填写"电脑"可以解决电脑文件乱码问题, 也可以填写`"auto"`实现自动识别文件编码, 但是会降低读写速度, 省略默认为初始化编码

小知识:将任意文件转化为字符串和将字符串还原为文件

(主要是图片文件 但是其他文件也是可以)

基本原理就是把文件以二进制形式读取出来 然后base64编码 等到一个字符串  还原为文件不过是相反的路子  这个很有用 很多文件这样的话都可以直接存储到数据库

注意:这样把文件转化为字符串并没有减少占用体积 反而是增加了占用体积  如果你的数据库的存储容量有限 就没有必要把这些文件都转化为字符串存储到数据库内

源码:

Import "zm.luae"
zm.Init 
Dim 账号文件路径="/sdcard/Pictures/账号.txt"
//图片和base64编码之间的相互转换 
Dim 图片文件路径="/sdcard/Pictures/1.docx"
dim b64 = zm.FileReadBinaryBase64(图片文件路径)
TracePrint b64
zm.FileWriteBinaryBase64("/sdcard/Pictures/2.docx", b64)

结果:

image

QM[zm]05.06 文件读写之初始化文件编码(VIP)

因为涉及到txt的编码问题 建议文件的读写全用紫猫的插件

原因:比如写入 zm.FileWrite 可以设置 写入txt里面的内容 编码是什么 而官方的命令无法设置 如果混在一起使用 可能会出现一些问题 所以建议全用紫猫的

建议在模板里面加入这个格式配

//固定的写法
Import "zm.luae"
zm.Init 
zm.FileInit {"encode":"电脑"}//这个默认编码是对所有的紫猫插件的文件读写函数都有效 所以固定的要加上
//后面就是各种文件操作了

小知识:关于zm.FileInit{}的使用

如果不是显示定义该函数 那么默认就是 zm.FileInit{“encode”:”utf-8”}  如果txt文件是ansi编码 那么就需要设置为zm.FileInit{“encode”:”电脑”}   而且这个文件读写的初始化会影响到每个紫猫文件读写函数 切记切记

小知识:zm.FileWrite()的使用  另外一个就是普通的覆盖写入 没什么说的

有两种使用方法 一个是参数为表 覆盖写入txt后 表的每个元素都是一行

zm.FileWrite 账号文件路径,{"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"}
注意该函数和

FileInit()初始化函数的设置 是相关的 如果初始化编码为utf8  那么filewrite写入表元素 之间是以 \n 分隔  如果初始化函数设置编码为电脑 则filewrite写入表元素之间是以\r\n 分隔  这个十分要紧千万注意


QM[zm]05.08 文件读写之追加写入文件(VIP)

zm.FileWriteAppend(文件路径, ...)  还是和FIleInit()设置的编码相关 所以不用怎么说了

zm.FileWriteAppend 账号文件路径,{"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"}

QM[zm]05.09 文件读写之插入指定行文本(VIP)

跳过了

QM[zm]05.10 文件读写之替换指定行文本(VIP)

跳过了

QM[zm]05.11 文件读写之读写二进制流文本(VIP)

小知识:二进制流读取写入的作用

可以把文件转化为二进制字符串 也可以把二进制流字符串还原回文件   比如文件上传 文件移动等等 都可以用这个办法实现  但是 转化为二进制流后 里面存在大量不能视的符号  传输起来有的时候会 网络上有的时候无法传递一些字符 我们要保证这些二进制流字符串的稳定传递 那么需要用base64编码 传递这个所有字符都是可视的base64编码后的字符

//固定的写法
Import "zm.luae"
zm.Init 
zm.FileInit {"encode":"电脑"}//这个默认编码是对所有的紫猫插件的文件读写函数都有效 所以固定的要加上
//后面就是各种文件操作了
Dim 账号文件路径="/sdcard/Pictures/账号.txt"
TracePrint zm.FileReadBinary(账号文件路径)

结果

image

看结果得到的二进制流字符串 有很多问号表示目前无法识别的字符 在传输期间可能会发生奇怪的无法识别更是存在可能 所以我们要用base64顺便编码下二进制流字符串

image

如上图 这样字符串就是全部都是英文字符和数字还有一些常见符号

是千万注意 base64编码后 这字符串只会比原来更大更多 这个要小心 这就要考虑网站本身的post传输的下载上传的极限 有的时候文件过大 导致服务器消耗大量资源来传输 也可以调整网站的配置来调整  可以参考这个 https://blog.csdn.net/u013239233/article/details/78040794 来调整网站设置  同时字段类型设置为longtext

这个思路也是很多网站上传图片的思路 把该图片转化为二进制流 字符串 把字符串上传即可 而不是ftp把该文件本身上传

QM[zm]05.12 文件读写之读写Base64二进制流文本(VIP)

没什么说的 以前都说完了  无非是搭配 网络数据共享 把baase64编码的字符串 上传到数据库 然后从数据库里面读取图片的base64字符串 还原图片 

源码:

Import "zm.luae"
zm.Init 
zm.FileInit {"encode":"电脑"}//这个默认编码是对所有的紫猫插件的文件读写函数都有效 所以固定的要加上
Dim 网络数据库接口地址="http://192.168.0.102/sql.php"
zm.NetDataInit 网络数据库接口地址, "上传图片"

//开始
Dim 原始图片文件路径="/sdcard/Pictures/1.png"
Dim 新图片文件路径="/sdcard/Pictures/4.png"
dim 原始图片base64后字符串= zm.FileReadBinaryBase64(原始图片文件路径)
Dim 当前数据库key=CStr(DateTime.Format("%Y_%m_%d_%H_%M_%S", Time()))
zm.NetDataSet 当前数据库key, 原始图片base64后字符串 //把图片的base64字符串上传到服务器
zm.FileWriteBinaryBase64(新图片文件路径,zm.NetDataGet(当前数据库key)) //从服务器上把base64字符串下载下来 还原为一个图片

QM[zm]05.13 文件读写之网络数据传输图片等文件(VIP)

用途

1.远程截图 运行脚本 脚本把截图上传服务器 我们从服务器那里还原截图

自行开发  自己想

2.如果文件过大 我们可以用紫猫的split来把文件分割为几个 然后依次上传 key设置后面接一连串的数值

实际测试我发现 如果

目标文件是个4m的 那么我base64编码需要快40秒 这个效率没什么意思 了解下写法即可

//固定的写法
Import "zm.luae"
zm.Init 
zm.FileInit {"encode":"电脑"}//这个默认编码是对所有的紫猫插件的文件读写函数都有效 所以固定的要加上
Dim 网络数据库接口地址="http://192.168.0.102/sql.php"
zm.NetDataInit 网络数据库接口地址, "上传mqb"

//开始
Dim 原始文件路径="/sdcard/Pictures/1.gif"
Dim 新文件路径="/sdcard/Pictures/4.gif"
dim 原始文件base64后字符串= zm.FileReadBinaryBase64(原始文件路径)
TracePrint len(原始文件base64后字符串)
//开始把这个4m文件分割为几块
dim 分割后的表 = zm.Split(原始文件base64后字符串, 100000)

//开始上传
For i = 0 To UBOUND(分割后的表)
    zm.NetDataSet "gif文件"&cstr(i),分割后的表(i)
    
Next

//从数据库里面下载需要的key对应的内容 以mqb开始 0,1,2,3 如果遇到一个为空的表示 后面没有了
dim 汇总的数据 = ""
Dim 临时数据1=""
dim i=0
Do
    临时数据1 = ""
    临时数据1=zm.NetDataGet("gif文件"&cstr(i))
    If IsNull(临时数据1) Then 
        Exit Do  //如果后面的key为空表示到头了
    Else 
        汇总的数据=汇总的数据&临时数据1
    End If
    i = i + 1
    TracePrint i
Loop

TracePrint 汇总的数据
//把汇总的数据还原为文件
zm.FileWriteBinaryBase64(新文件路径,汇总的数据)


3.base64初始化的用法 默认用最普通的第一个

结果 = zm.InitBase64([字符表[, 填充符]])

简单的介绍下base64的3个不同模式

1.普通模式 不说了

2.安全模式 把普通模式的+ /转化为%XX  这个模式方便用于url传输 因为+/=之类的在url地址里有自己特殊的意义 所以必须转义

3.这种似乎用不上 不研究了 需要再百度

e123

猜你喜欢

转载自www.cnblogs.com/zjl8455482/p/10230993.html