设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 9036|回复: 36
打印 上一主题 下一主题

[已经解决] 问个关于ruby的问题

[复制链接]

Lv3.寻梦者

小睡

梦石
0
星屑
2191
在线时间
508 小时
注册时间
2010-8-1
帖子
1378
跳转到指定楼层
1
发表于 2010-8-1 18:08:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 DeathKing 于 2010-8-12 08:38 编辑

就是Marshal模块中的dump和load
感觉这个读写文件的模块好强大啊~直接就把对象输出为数据了
2个问题:
1. 对同一文件的读写,dump 和 load 各对象的顺序是不是要一致?
2. 写入文件中的字符串是什么编码的?gb2312?utf8?utf16?可以改么?

接下来是扯开话题了:
VX中的鼠标脚本有么?居然没找到……
有没有办法引入输入法?

原因是这样的……想改vx中的数据结构,于是想大不了我用RGSS自己设计个数据库编辑……

Lv3.寻梦者

小睡

梦石
0
星屑
2191
在线时间
508 小时
注册时间
2010-8-1
帖子
1378
37
 楼主| 发表于 2010-8-9 18:48:11 | 只看该作者
回复 紫苏 的帖子

懂了~这个类挺好,收下了~
   
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小睡

梦石
0
星屑
2191
在线时间
508 小时
注册时间
2010-8-1
帖子
1378
36
 楼主| 发表于 2010-8-9 18:47:16 | 只看该作者
回复 小鱼子 的帖子

这个估计是中文的编码问题……
   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

天空之神

梦石
0
星屑
156
在线时间
173 小时
注册时间
2009-5-3
帖子
612
35
发表于 2010-8-9 13:36:21 | 只看该作者
貌似中文名文件会出错……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
34
发表于 2010-8-9 01:31:15 | 只看该作者
回复 星之璇 的帖子

看脚本最后的 String#to_unicode 和 String#to_UTF8 方法
http://rpg.blue/forum.php?mod=vi ... 23477&from=home
   

评分

参与人数 1星屑 +1500 收起 理由
DeathKing + 1500 = =本贴涉及内容过多

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

小睡

梦石
0
星屑
2191
在线时间
508 小时
注册时间
2010-8-1
帖子
1378
33
 楼主| 发表于 2010-8-8 23:28:30 | 只看该作者
回复

str = ''
open("filename") { |fin|
    str = fin.read
}
WideCharToMultiByte.call(...)   # 把 str 从 UTF-16 转码到 UTF-8

紫苏 发表于 2010-8-8 16:00


那就避免不了下一个问题了,WideCharToMultiByte还有MultiByteToWideChar两个函数的具体用法……对API不是很懂
欢迎来到6R RTP Maker!加入RTP行走图制作组的行列吧!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小睡

梦石
0
星屑
2191
在线时间
508 小时
注册时间
2010-8-1
帖子
1378
32
 楼主| 发表于 2010-8-8 23:26:07 | 只看该作者
回复 一瞬间的幻觉 的帖子

这个……因为我想做的……事件解决不了啊……
   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
239
在线时间
2399 小时
注册时间
2008-4-11
帖子
12326

贵宾第6届短篇游戏比赛季军

31
发表于 2010-8-8 20:36:44 | 只看该作者
你们都高手,事件派的。。。路过
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
30
发表于 2010-8-8 16:00:21 | 只看该作者
回复 星之璇 的帖子

这个是 Ruby 1.9 才有的功能,RM 用的是 Ruby 1.8,并不支持这种文件打开的模式
   
那就比如,某文本文件是utf-16的编码,我该如何读取呢? ruby下输入了个File.public_methods……瞬间晕了,没找到

如果本来就是 UTF-16,那就不需要 MultiByteToWideChar 了(已经是宽字符 Wide character),获取数据后直接 WideCharToMultiByte 转到 UTF-8:

str = ''
open("filename") { |fin|
    str = fin.read
}
WideCharToMultiByte.call(...)   # 把 str 从 UTF-16 转码到 UTF-8

在 Ruby 里类本身也是对象,是 Class 类型的对象,而 public_methods 是返回接收者对象的公有实例方法,你这里指定的接收者是 File,File 是一个 Class 对象,所以这里返回给你的是该 Class 对象,包括其基类的实例方法

我之前说的 IO#read 是 IO 类实例的实例方法,“类#方法”表示类的实例方法,而不是类本身这个 Class 对象的实例方法(也就是其它语言中的静态方法)
File 是 IO 的子类,所以也继承了 IO#read方法
你想要的是 File 类的实例方法,可以通过 instance_methods 来返回某个类的实例方法(或者已经有了一个 File 的实例对象,就可以让这个对象作为接受者调用 public_methods):File.instance_methods
当然凭人眼想要在这么一堆没有换行的方法名里浏览不是什么轻松的事,这里为了演示 read 确实是 File 的实例方法,可以尝试运行 p File.instance_methods.include?("read")

点评

万分感谢,受教了~  发表于 2010-8-8 22:57
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小睡

梦石
0
星屑
2191
在线时间
508 小时
注册时间
2010-8-1
帖子
1378
29
 楼主| 发表于 2010-8-8 14:34:06 | 只看该作者
回复 紫苏 的帖子

在ruby 的文档里找到了这段:

a = File.new('some filename', 'rb:ASCII-8BIT') # strings from this will be read in as ASCII-8BIT
b = File.new('some filename', 'r') # strings from this will be read in as whatever the Encoding.default_external is
# you can change what the encoding will be
a.set_encoding "UTF-8" # from now on it will read in UTF-8
   
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-1 03:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表