我想解析一个CSV文件,以便将每一行视为一个对象,其中header-row是对象中属性的名称.我可以写这个,但我确定它已经在那里了.
这是我的CSV输入:
"foo","bar","baz"
1,2,3
"blah",7,"blam"
4,5,6
Run Code Online (Sandbox Code Playgroud)
代码看起来像这样:
CSV.open('my_file.csv','r') do |csv_obj|
puts csv_obj.foo #prints 1 the 1st time, "blah" 2nd time, etc
puts csv.bar #prints 2 the first time, 7 the 2nd time, etc
end
Run Code Online (Sandbox Code Playgroud)
使用Ruby的CSV模块,我相信我只能通过索引访问字段.我认为上面的代码会更具可读性.有任何想法吗?
我有一个对象结果包含一个result对象数组以及一些有关数组中对象的缓存统计信息.我希望Results对象能够像数组一样运行.我的第一个切入是添加这样的方法
def <<(val)
@result_array << val
end
Run Code Online (Sandbox Code Playgroud)
这感觉非常像c,我知道Ruby有更好的方法.
我也希望能够做到这一点
Results.each do |result|
result.do_stuff
end
Run Code Online (Sandbox Code Playgroud)
但我不确定这种each方法在引擎盖下真正做了什么.
目前我只是通过一个方法返回底层数组并调用它们,这似乎不是最优雅的解决方案.
任何帮助,将不胜感激.
我一直在使用Sinatra一段时间,我想通过websockets推送数据,为我的web-app添加一些实时功能.
我已经成功地使用了gem'em-websocket',但是还没能编写一个带有sinatra Web服务器和web-socket服务器的ruby文件.
我试过旋转跑!或者开始!在单独的线程中关闭方法但没有成功.
有没有人得到这个工作?
我希望将它们放在同一个文件中,然后在两个服务器之间共享变量.
谢谢!
我有一个Foo类,里面有一些成员变量.当类的两个实例中的所有值相等时,我希望对象"相等".然后,我想将这些对象作为哈希中的键.当我目前尝试这个时,哈希将每个实例视为不相等.
h = {}
f1 = Foo.new(a,b)
f2 = Foo.new(a,b)
Run Code Online (Sandbox Code Playgroud)
此时f1和f2应该相等.
h[f1] = 7
h[f2] = 8
puts h[f1]
Run Code Online (Sandbox Code Playgroud)
应该打印8
从上一篇文章中我得到了Ruby模式在emacs中工作.这很有效.
我们公司使用4个空格进行缩进,而不是默认2.我很难让它工作.
这是我的.emacs文件
(add-to-list'load-path"〜/ rdoc-mode.el")
(需要'ruby-mode)
(setq indent-tabs-mode nil); 始终用空格替换制表符
(setq-default tab-width 4); 为所有缓冲区设置标签宽度为4
有谁看到我做错了什么?
谢谢!
我正在使用extjs制作基于Web的logviewer.
我希望将新的日志行添加到gridview的底部,因为它通过不需要排序将其移动到网格顶部(以及我的同事喜欢它的方式)来节省cpu.
我的问题是理想情况下,在添加新行后,网格将滚动到底部.
我一直在查看文档,我无法弄清楚如何做到这一点.我只看到滚动到顶部的方法.
有任何想法吗?
谢谢!
Extjs API站点为您执行的每个搜索添加一个新选项卡.
每个选项卡上都有一个红色X,用于关闭选项卡,类似于浏览器所具有的选项卡.
看看这里:
我想复制它,它似乎是内置于API的东西,但找不到它.
有任何想法吗?
尝试通过ruby gems安装json模块时,我收到此警告.
有任何想法吗?
Mac-Mini poulh $ sudo gem install json
密码:
警告:文件'/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8 /specifications/json-1.2.0.gemspec'未评估为gem规范
构建原生扩展.这可能需要一段时间......
错误:安装json时出错:
错误:无法构建gem原生扩展.
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb install json mkmf.rb在/System/Library/Frameworks/Ruby.framework/Versions/找不到ruby的头文件1.8/usr/lib中/红宝石/ ruby.h
我从中获取文件的供应商正在通过SSL从FTP更改为FTP.
我正在尝试将代码更新net/ftp为net/ftptls
我需要连接的新主机未经过认证,我的脚本会报告此错误.
hostname与服务器证书不匹配
供应商不会解决这个问题.
看着/usr/lib/ruby/1.8/net/ftptls.rb 我认为通过猴子修补FTPTLS来忽略不受信任的主机并不会太难.
我试图改变verify_mode到OpenSSL::SSL::VERIFY_NONE和注释掉post_connection_check`线.
既没有奏效.
有关如何做到这一点的任何想法?
require 'socket'
require 'openssl'
require 'net/ftp'
module Net
class FTPTLS < FTP
def connect(host, port=FTP_PORT)
@hostname = host
super
end
def login(user = "anonymous", passwd = nil, acct = nil)
store = OpenSSL::X509::Store.new
store.set_default_paths
ctx = OpenSSL::SSL::SSLContext.new('SSLv23')
ctx.cert_store = store
ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER
ctx.key = nil
ctx.cert = nil
voidcmd("AUTH TLS")
@sock = OpenSSL::SSL::SSLSocket.new(@sock, ctx)
@sock.connect
@sock.post_connection_check(@hostname)
super(user, passwd, acct)
voidcmd("PBSZ 0") …Run Code Online (Sandbox Code Playgroud) 我有两个对象,帐户和交易,其中交易是唯一的帐户对和递增的ID号.我想使用boost :: hash来获取这些值的唯一值,并按照说明重载hash_value方法:http://www.boost.org/doc/libs/1_53_0/doc/html/hash/custom.html
class Account {
...
};
class Transaction
{
Account account;
unsigned int id;
};
Run Code Online (Sandbox Code Playgroud)
Account的hash_value方法正常工作,并且返回的值对于给定的帐户始终是唯一的,但是要创建唯一的对,Transaction的方法需要使用hash _combine(根据boost的说明):
inline std::size_t hash_value( const Account& acct )
{
boost::hash<int> hasher;
size_t rval = hasher( acct.id() ); //just an int. guaranteed to be unique
return rval;
}
inline std::size_t hash_value( const Transaction& t )
{
std::size_t seed = 0;
boost::hash_combine( seed, t.account );
boost::hash_combine( seed, t.id );
return seed;
}
Run Code Online (Sandbox Code Playgroud)
这有时会返回不同输入的相同值.为什么??我只有几千个账户,而且身份证号码只有几十万.这似乎不是一个上限问题.
有谁知道这是一个错误,还是我需要种子提升哈希?
谢谢
我有一个仪表板网络应用程序,如果连接出现问题,我想播放警报声音。该站点的 ajax 代码将轮询数据并在无法连接时降低其刷新率。服务器恢复后,站点将继续工作。
同时,我希望每次无法连接时播放声音(所以我知道检查服务器)。这是该代码。这段代码有效。
var error_audio = new Audio("audio/"+settings.refresh.error_audio);
error_audio.load();
//this gets called when there is a connection error.
function onConnectionError() {
error_audio.play();
}
Run Code Online (Sandbox Code Playgroud)
但是,第二次使用该功能时,音频无法播放。在 Chrome 的调试器中深入研究,音频元素中的“played”属性被设置为 true。将其设置为 false 没有任何结果。有任何想法吗?
当我在Linux上按Ctrl键我的程序时,我经常得到类似于堆栈转储(崩溃)的输出.
我可以捕获Ctrl-C信号并正常退出吗?
谢谢!
我有一个sinatra服务foo.rb
要运行它,我在不同的端口上输入"ruby foo.rb -p 5000".
当程序运行时,我希望能够获得端口(在这种情况下为5000)和其他信息.有没有办法在应用程序运行时获取这样的信息?
谢谢