一、读写文件

1、读文件

str = string.load(filename);
str = string.load(filename,tag);

第一个字符串参数指定文件名,
第二个字符串参数指定读文件方式(类似io.open的最后一个参数),可省略(默认为"rb");
成功返回文件内容,失败返回nil。

可选的tag参数如下

可以通过以下字符标志控制读文件方式。
---------------------------
r+ 打开文件,如果不存在则创建
r 打开文字文件只读,等于rt
rb 以二进制方式打开文件只读
rt 以文本方式打开文件只读。

b表示以二进制方式读文件,t表示以文本方式读文件.
如果指定t模式,会自动将回车换行符号/r/n替换为单一的换行符号/n

例:
str = string.load("c://test.txt","rb");

也可以省略第二个参数,默认为rb。例:
str = string.load("c://test.txt");

您也可以自动捕获打开文件时遇到的错误:

--您是否想自动取得string.load为什么会出错呢?使用code,msg = win.lastError() 即可。
--您可能会想到,是否可以将 win.lastError()作为assert的第二个参数自动取得系统提供的错误信息?
--但是我们遇到一个参题, 我们必须取win.lastError()的第二个返回值,这时候就要用到select函数了
str = assert( string.load("c://no-file.txt") ,select( 2, win.lastError() ) );
--win.lastError()的所有返回值作为参数传递给select 等于 select(2,code,msg)
--select从第二个参数向后数,找到第一个参数指定的参数并返回

2、写文件

string.save(str,filename)
string.save(str,filename,tag);

第一个字符串参数指定文件名,
第二个字符串参数指定写文件方式(类似io.open的最后一个参数),可省略(默认为"w+b");
成功返回文件长度,失败返回nil。

可以通过以下字符标志控制读写件方式。
---------------------------
"w" 创建文字文件只写
"w+" 打开文件无论是否存在都创建新文件,原来的文件内容会被清除
"a" 打开(文件不存在则创建一个文件)并追加内容
"a+" 打开(文件不存在则创建一个文件)并追加内容
---------------------------
下面两个参数可以附加在上面任一个标记的后面,如果不指定,t为默认项
"b"表示以二进制方式写文件
"t"表示以文本方式写文件

如果指定t模式(或不指定b模式),会自动将单一的换行符号/n替换为回车换行符/r/n。

例:
string.save(str ,"c://test.txt","w+b")

也可以省略第二个参数,默认为w+b,例如:
string.save(str ,"c://test.txt")

使用string.load string.save io.open等函数设置读写标记时应遵守以下规则:

1、a,w,r等只能出现在第一个标记
用a+ w+ r+表示扩展的属性,如r+表示可读写,而不是rw

2、可使用ccs标记指定编码,

如 str = string.load(str,"c://test.txt","r,ccs=UTF-8")
将UTF8编码的test.txt读入并转换为标准UNICODE编码

如果输入错误的标记会弹出错误提示,而不是程序崩溃。
考虑到读写文件的效率,不会检测','号后面的指定编码部份是否正确(如果这部份写错了,将会导致程序崩溃)

二、内码转换

str2 = string.toUnicode(str,codepage);
第二个参数指定codepage,可省略第二个参数( 默认为ANSI:0 )
将字符串转换从指定编码转换为unicode编码。

string.fromUnicode(str,codepage);
第二个参数指定codepage,可省略第二个参数( 默认为ANSI:0 )
从unicode编码还原到指定编码。

在任何两种codepage(包括UTF8)之间转换编码都应当先转换为unicdoe编码
顺序为: codepage1-->unicode->codepage2

例如把UTF8转换为ANSI编码,应当这样写

_CP_UTF8 = 65001 --UTF-8 translation
_CP_ACP = 0 --default to ANSI code page

str = string.toUnicode(str,_CP_UTF8); --转换为unicode;
str = string.fromUnicode(str,_CP_ACP); --转换为ANSI编码

下面是一个简单的示例,将big5繁体编码转换为gb2312编码

win.consoleOpen();

str = "翠籓 羉砰"
str = string.toUnicode(str,950);
print("Unicode",str);

str = string.fromUnicode(str,936);
print("ANSI",str);

三、加密解密

str = string.encode(str[,key])
第一个参数指定待加密的字符串,第二个参数指定密钥。
可省略第二个参数,不指定密钥则进行base64编码,否则加密字符串。
如果指定第二个参数(密钥),则进行加密处理以后,再进行base64编码.

str = string.decode(str[,key[,check]])
第一个参数指定待解密的字符串,第二个参数指定密钥。第三个参数指定在解压前是否进行安全检测.
可省略第二个参数、第三个参数,不指定密钥则进行base64解码,否则解密字符串。

--string.decode的第一个参数如果不是一个已加密的字符串,会出现内存溢出错误。
--为避免出现这个错误,可以在将第三个参数check指定为true启用安全检测。
--不启用安全检测(省略第三个参数)可以加快解密的速度

str2 = string.decode("abcde" ,"k",true);
--通过增加一个true参数启用安全检测,如果字符串不是有效的加密字符串,则返回nil空值

--如果需要自动抛出错误,可以这样写
str2 = assert( string.decode("abcde" ,"k",true),"参数一不是被加密的字符串" );

base64编码可以方便的将二进制文件转换为字符串,以方便通过xml序列化存取。
使用base64编码,您可以把模拟程序要用到的图片、声音等文件写入ApeML的数据区块中。

下面是一个完整示例:

win.consoleOpen();

str = "这是一个字符串"
print(str);

str = string.encode( str,"这是一个密钥");
print("加密以后: "..str);

str = string.decode(str,"这是一个密钥");
print("解密以后: "..str);

三、压缩解压缩

在LAScript中,一个函数即可实现压缩解压缩二进制数据。

str = string.zip(str) 压缩字符串或二进制数据 ;
str = string.unzip(str) 解压缩字符串或二进制数据;

win.consoleOpen();

str = "这是一个字符串这是一个字符串这是一个字符串这是一个字符串这是一个字符串"
print("压缩以前字符串长度 "..#str);

str = string.zip( str);
print("压缩以后字符串长度 "..#str);

str = string.unzip(str)
print("解压后的字符串: "..str);

四、生成随机字符串

str = string.random(size[,strs]);
第一个参数指定字符串的长度,
第二个参数指定随机字符串集合(可以省略,默认为所有 大小写字母及数字);

这个函数在官方提供的std脚本库中,
必须首先调用 import("std")导入std脚本库,然后才能使用这个函数。

import("std"); --导入std脚本库

str = string.random(10);

--生成长度为十位包含大小写字母及数字的随机字符串

str = string.random(10,"这里可以指定字符集合");

--你可以通过第二个参数指定字符集合,可以使用中文、英文字母或数字, 但是不要中英文混杂在一起。

六、生成生成全球唯一标志

guid = string.getGUID();
生成全球唯一标志(即永不重复的字符串),返回值是一个字符串。

这个函数在官方提供的std脚本库中,
必须首先调用import("std")导入std脚本库,然后才能使用这个函数。

这个函数也是调用winapi的一个较复杂一点的例子,
可以打开/Fairy_Ape/import/std.LAS看这个函数的源代码。

import("std");

guid = string.getGUID();
win.messageBox(guid);

string字符串的高级用法相关推荐

  1. C++中String 的用法 string 字符串的使用方法

    转载自百度经验 :https://jingyan.baidu.com/article/20b68a8854f919796dec6265.html?qq-pf-to=pcqq.c2c string类的常 ...

  2. 基于Java的String字符串基本用法总结

    在Java中,String类是字符串操作类,提供了多种方法对字符串进行操作,经过学习对String类的常用方法总结如下: 一.String字符串的创建 由于String类位于Java的lang包下,所 ...

  3. Newtonsoft.Json高级用法

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  4. Git log高级用法

    格式化Log输出 首先,这篇文章会展示几种git log格式化输出的例子.大多数例子只是通过标记向git log请求或多或少的信息. 如果你不喜欢默认的git log格式,你可以用git config ...

  5. python3.7正则表达式语法_python3正则表达式的几个高级用法

    python3正则表达式的几个高级用法 一. 概述 本文举例说明python3正则表达式的一些高级级法,主要是各类分组,可应用于 1.复杂网页文件中的有用数据 例如,采用爬虫技术取得网页后,对网页内任 ...

  6. php switch case 判断语句,PHP的switch判断语句的“高级”用法详解,switch详解_PHP教程...

    PHP的switch判断语句的"高级"用法详解,switch详解 只所以称为"高级"用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实 ...

  7. python的xpath用法_Python爬虫杂记 - Xpath高级用法

    xpath 高级用法 1. 匹配当前节点下的所有: .// . 表示当前 // 表示当前标签下的所有标签 注: 要配合使用 2. 匹配某标签的属性值: /@属性名称 这里以input里的value值为 ...

  8. python xpath定位元素方法_Python爬虫杂记 - Xpath高级用法

    xpath 高级用法 1. 匹配当前节点下的所有: .// . 表示当前 // 表示当前标签下的所有标签 注: 要配合使用 2. 匹配某标签的属性值: /@属性名称 这里以input里的value值为 ...

  9. (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

    版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] ValueAnimator的高级用法 ObjectAnimator的高级用法 转载请注明出处:http://blog.csdn.ne ...

最新文章

  1. 软件测试理论你知道多少?
  2. java scala 混合编程_java与scala混合编程打包(maven构建)
  3. Redox随笔(1)-用Rust语言编写的类UNIX操作系统
  4. Nginx 负载均衡配置和策略
  5. c语言小程序hello,【北北的小程序】北のC语言第一课:helloworld
  6. java setrotation_如何使用Java库将文档转换为横向模式?
  7. vue-router实例
  8. Educational Codeforces Round 103 (Rated for Div. 2) D. Journey dp
  9. P3975-[TJOI2015]弦论【SAM】
  10. 嵌入式基础认识1:存储器(如RAM、ROM和FLASH)
  11. 建造模式实际应用_建造多少,购买多少:为聊天和消息传递应用程序提供支持...
  12. 彩色手绘情节人插画装饰素材,psd分层利于应用!
  13. html 折叠焦点图切换,jQuery层叠式图片切换焦点图插件
  14. 如何快速提升 Go 程序性能?
  15. linux之dos2unix命令
  16. asp.net + mysql
  17. Spring Cloud Eureka源码分析之心跳续约及自我保护机制
  18. 2022年西式面点师(初级)考试题库及模拟考试
  19. Stable Diffusion:使用Lora用二十张图片训了一个简易版薇尔莉特头像生成器(不作商用,纯纯个人兴趣,狗头保命)
  20. 高考数学考用计算机求函数吗,高考数学52种快速做题方法整理!再也不用担心考试时间不够了...

热门文章

  1. 今年7月,一起来看谷歌如何测试移动应用!
  2. 理顺 JavaScript (7) - 数字相关问题
  3. C++模板类中使用静态成员变量(例如Singleton模式)
  4. 使用mongoose和bcrypt做认证
  5. 关于Xcode7中添加不了libresolv.dylib等类似库的问题
  6. Asp.net MVC中使用Razor Generator实现View的单元测试
  7. centos7源码编译安装mariadb
  8. 写出优质Java代码的4个技巧
  9. 飞康力推“一次付费”的存储定价模式
  10. 利用反射打印对象一般成员属性值