Project1

标题: CSV表格数据库v1.0【VA】 [打印本页]

作者: Silentever    时间: 2015-9-4 21:18
标题: CSV表格数据库v1.0【VA】
本帖最后由 Silentever 于 2015-9-5 13:10 编辑

为什么RGSS没有CSV!?
为什么ASCII-8BIT就是不能转UTF-8!?
为什么CSV不能直接UTF-8必须用记事本转码!?


[line]分割线[/line]

以上纯属抱怨。

正文:说什么功能反正看标题就知道了吧?总之就是数据库↔CSV表格双向转换,可以转换道具、技能、武器跟防具数据。
支持汉字←请大神别吐槽,无知的小生跟csv编码大战了整整2天。
虽然表格输入说明文字不太美观,但重在方便(实用性至上主义)。

关键部分是抄……参考HimeWorks的脚本,感觉不说出来不太好。

以上完。然后是范例
CSV数据库v1.0.rar (1.43 MB, 下载次数: 323)

[line]分割线[/line]

另外需要注意的:每次保存csv需要手动转码到utf-8(用记事本),否则汉字会变成乱码。
作者: 墨凌羽    时间: 2015-9-4 23:40
本帖最后由 墨凌羽 于 2015-9-4 18:11 编辑

然而我写过这种东西。。。ORZ
下下来看看


脚本有问题ORZ。。。。csv文件已损坏
作者: VIPArcher    时间: 2015-9-5 08:35
本帖最后由 VIPArcher 于 2015-9-5 08:49 编辑
ASCII-8BIT就是不能转UTF-8
  1. ASCII_8BIT = '喵喵喵'.unpack('M*').first
  2. ASCII_8BIT.force_encoding __ENCODING__ #=> '喵喵喵'
  3. ASCII_8BIT.force_encoding 'UTF-8' #=> '喵喵喵'
  4. eval ASCII_8BIT.inspect #=> '喵喵喵'
复制代码

作者: hijl1990    时间: 2015-9-5 11:26
于是买了,看看有多方便
作者: 墨凌羽    时间: 2015-9-5 15:27
本帖最后由 墨凌羽 于 2015-9-5 09:47 编辑

嗯 试了下新版 貌似除了转码问题没解决之外 还有“no table find...”什么的


嗯 我之前写的csv读取
实际上没必要和那个编码较劲 外部csv文件保持utf-8编码就好了 反正RM里折腾编码会很蛋疼

RUBY 代码复制
  1. module DataBase
  2.  
  3.   def self.init
  4.       @classlist = []
  5.   end
  6.   def self.classlist
  7.     return @classlist
  8.   end
  9.   def self.classlist= obj
  10.     @classlist = obj
  11.   end
  12.  
  13.   module DataBase::CSV
  14.  
  15.     attr_reader :data_table
  16.  
  17.     def self.load_data(filename)
  18.       data = readtable(filename)
  19.       class_name = make_data_class(data, filename)
  20.       @data_table = fill_datas(data, class_name)
  21.     end
  22.  
  23.     #生成数据文件对应的类
  24.     def self.make_data_class(data, filename)
  25.       names = data[0]   
  26.       data_class = DataBase.const_set(filename.capitalize, Class.new)
  27.       data_class.class_eval do
  28.         names.each{|i| attr_accessor i}
  29.         define_method(:initialize) do |val|
  30.           names.each_with_index do |name, i|
  31.             instance_variable_set("@"+name, eval(val[i]))
  32.           end
  33.         end
  34.       end
  35.       DataBase.classlist.push(filename)
  36.  
  37.       return data_class
  38.     end
  39.  
  40.     #填充数据
  41.     def self.fill_datas(data, class_name)
  42.       table = []
  43.       table[0] = nil
  44.       #删除头数据
  45.       data.delete_at(0)
  46.       data.each_index{|i| table.push(class_name.new(data[i]))}
  47.       return table
  48.     end
  49.  
  50.     #读取
  51.     def self.readtable(filename)
  52.       data = File.open("#{$DATAPATH}/#{filename}.csv", "r") do |f|
  53.         f = f.readlines()
  54.         f = f.each_index do |i|
  55.           f[i] = f[i].split(",")
  56.           f[i][-1] = f[i][-1].chomp
  57.         end
  58.       end
  59.     end
  60.   end
  61. end

作者: Silentever    时间: 2015-9-5 20:02
本帖最后由 Silentever 于 2015-9-5 13:14 编辑
墨凌羽 发表于 2015-9-5 08:27
嗯 试了下新版 貌似除了转码问题没解决之外 还有“no table find...”什么的


嗯 我之前写的csv读取


其实修复的是写入csv的时候汉字变成乱码的问题。另外也忘了备注csv必须每次手动转码才行……

问题在于从ASCII文件读取汉字会变成乱码,而csv只能用ASCII保存,所以一直在尝试转码解决这个问题。
现在需要每次手动转码才能支持汉字,希望以后能找到更完美的解决办法。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1