对于我的代码,我收到了客户端的数据流,这些数据以逗号分隔,每个字段的数据类型不同。收到后,我将它们拆分并写入数组。代码如下:
require 'socket'
s = TCPSocket.open('localhost',2000)
time = Time.now.to_i
s.puts(cf,PUB,#{time},001.41011,N,103.76822)
s.close
在eventmachine服务器上,我编码如下:
require 'rubygems'
require 'eventmachine'
require './Load2MySQL.rb'
module EchoServer
def post_init
puts "-- someone connected to the echo server!"
end
def receive_data data
loc = Array.new(6)
loc = data.split(',').to_a
wr2db(loc[0], loc[1], loc[2], loc[3], loc[4], loc[5])
end
def unbind
puts "-- someone disconnected from the echo server!"
close_connection
# EventMachine::stop_event_loop
end
end
EventMachine::run {
EventMachine::start_server "0.0.0.0", 2000, EchoServer
}
我发现这样做,数组中的所有元素都将转换为字符串。如何保留其数据类型?
此致 New2RoR
答案 0 :(得分:0)
原因是使用split方法,它确实返回一个字符串数组。唯一的方法是沿着值发送每个元素的类型,或者,如果你已经知道它,在分割后强制类型如下:
float_val = loc(5).to_f
第三种方法是使用Ruby's CSV生成和解析字符串。它允许您使用读取值的字段转换器,并将其转换为浮点数或整数(如果适用)。
另外,我认为你不需要在Ruby中做loc = Array.new(6)
。
此外,如果你正在使用一个已建立的mysql适配器,你真的不必担心存储之前的类型转换,如果这是你的问题,它将为你完成。
答案 1 :(得分:0)