Có công cụ Ruby nào cho phép tôi tải một tập tin các từ viết tắt theo định dạng (Viết tắt => Abr) không? Sau đó, tôi cần phải đọc từng từ từ một tập tin khác. Nếu từ khớp với từ trong các từ viết tắt, tôi cần thay đổi từ đó thành từ viết tắt. Tôi nghĩ rằng tôi có thể sử dụng Hash nhưng tôi không biết làm thế nào để tải nó từ một tập tin.Ruby: Làm thế nào để tải một Hash từ một tập tin?
Trả lời
YAML là định dạng rất phổ biến để lưu trữ dữ liệu theo cách có thể được chuyển giữa các ứng dụng và ngôn ngữ lập trình. JSON là một thay thế khác, rất phổ biến trong các trang web.
Tôi sử dụng YAML cho những thứ như tệp cấu hình vì nó rất dễ đọc và sửa đổi. Ví dụ, cấu trúc này Ruby:
irb(main):002:0> foo = { 'a' => 1, 'b' => [2, 3], 'c' => { 'd' => 4, 'e' => 5 } }
{
"a" => 1,
"b" => [
[0] 2,
[1] 3
],
"c" => {
"d" => 4,
"e" => 5
}
}
Trông như thế này khi chuyển đổi sang YAML:
irb(main):003:0> puts foo.to_yaml
---
a: 1
b:
- 2
- 3
c:
d: 4
e: 5
Bạn có thể tiết kiệm đó vào một tập tin:
File.open('foo.yaml', 'w') { |fo| fo.puts foo.to_yaml }
và đọc nó lại:
bar = YAML.load_file('foo.yaml')
{
"a" => 1,
"b" => [
[0] 2,
[1] 3
],
"c" => {
"d" => 4,
"e" => 5
}
}
Similarl y, bằng cách sử dụng JSON:
puts foo.to_json
{"a":1,"b":[2,3],"c":{"d":4,"e":5}}
Bạn có thể lưu JSON vào một tệp như bạn làm với YAML và sau đó tải lại nó và biến nó thành băm. Đó là một cú pháp hơi khác nhau mặc dù:
irb(main):011:0> File.open('foo.json', 'w') { |fo| fo.puts foo.to_json }
nil
irb(main):012:0> bar = JSON.parse(File.read('foo.json'))
{
"a" => 1,
"b" => [
[0] 2,
[1] 3
],
"c" => {
"d" => 4,
"e" => 5
}
}
Chiến thắng lớn với một trong hai là bất kỳ ngôn ngữ có thể đọc YAML hoặc JSON có thể đọc các tập tin và sử dụng dữ liệu, hoặc là đọc hoặc viết nó.
Thực hiện thay thế chuỗi rất dễ dàng khi bạn có băm, vì mã băm của Ruby String gsub
hiểu được băm. Đây là từ the docs:
Nếu đối số thứ hai là một Hash, và các văn bản phù hợp là một trong những chìa khóa của nó, là giá trị tương ứng là chuỗi thay thế.
Điều này có nghĩa bạn có thể làm một cái gì đó như thế này:
foo = 'Jackdaws love my giant sphinx of quartz'
bar = { 'quartz' => 'rosy quartz', 'sphinx' => 'panda' }
foo.gsub(Regexp.union(bar.keys), bar)
"Jackdaws love my giant panda of rosy quartz"
Bạn phải xem ra va chạm từ biên giới làm thay thế, nhưng \b
cờ trong một mô hình có thể được giúp đỡ. Làm cho công việc đó là một bài tập cho người đọc.
Xem Marshal.load
và Marshal.dump
.
Ngoài ra, bạn có thể xem xét việc tuần tự hóa băm thành tệp yaml và sau đó đọc/lưu nó qua YAML.
Định dạng 'Marshal' là (hoặc có thể) cụ thể cho phiên bản Ruby đang được sử dụng và không có cách nào để đọc dữ liệu' Marshal' khi các phiên bản không khớp. Điều này làm cho nó một định dạng xấu cho serialization vào đĩa. –
Tôi đã tìm thấy điều này http://www.rubydoc.info/gems/bosh-director/1.1868.0/Bosh%2FDirector%2FConfig.load_hash sau khi tìm cách tự tải bản thân.
ví dụ của tôi là khi giao dịch với MongoDB trong ứng dụng Rails.
Vì vậy, tôi đặt phương thức Initialize để lấy bộ sưu tập mà tôi sẽ làm việc.
def initialize @collection = self.class.collection end
self.class đây là lớp tôi đang ở. Hãy sử dụng dân làm ví dụ.
các phương pháp tải là sau
def load_collection(file_path)
hash_values = self.class.load_hash(file_path)
@collection.insert_many(hash)
end
bên trong một binding.pry
[1] pry(#<People>)> file_path
=> "people_results.json"
[2] pry(#<People>)> hash
=> [{"number"=>0, "first_name"=>"SHAUN", "last_name"=>"JOHNSON", "gender"=>"M", "group"=>"15 to 19", "secs"=>1464}, {"number"=>1, "first_name"=>"TUAN", "last_name"=>"JOHNSON", "gender"=>"M", "group"=>"masters", "secs"=>3994}, {"number"=>2, "first_name"=>"EARLINE", "last_name"=>"BROWN", "gender"=>"F", "group"=>"masters", "secs"=>1415}...
[3] pry(#<People>)> self
=> #<People:0x007fc80301b5f8 @coll=#<Mongo::Collection:0x70248510355560 namespace=test.people>>
[4] pry(#<People>)> self.class
=> People
Vì vậy, trong trường hợp này, phương pháp load_hash
mất một tham số, và trong trường hợp này tôi trôi qua trong một json với một số dữ liệu. Sau đó tôi chèn dữ liệu đó vào bộ sưu tập của tôi.
- 1. Làm thế nào để tải lên một tập tin trong ruby trên đường ray?
- 2. Làm thế nào để thêm một cột từ một tập tin vào một tập tin
- 3. Làm thế nào để tải một tập tin xem magento (.phtml) từ một bộ điều khiển
- 4. Ruby: chọn một hash từ bên trong một mảng
- 5. Làm thế nào để bảo vệ tên tập tin từ xa khi tải về một tập tin sử dụng curl
- 6. Làm thế nào để tạo một chuỗi Ruby an toàn cho một hệ thống tập tin?
- 7. làm thế nào để có được một biến từ một tập tin vào một tập tin trong Node.js
- 8. Làm thế nào để tải tập tin một .properties thành một jsp
- 9. Làm thế nào để tải một tập tin xib trong một UIView
- 10. Làm thế nào để giải nén một tập tin trong Ruby on Rails?
- 11. Làm thế nào để Ruby biết nơi để tìm một tập tin cần thiết?
- 12. Làm thế nào để nhúng một tập tin vào một tập tin HTML?
- 13. Làm thế nào để xóa các tập tin trong amazon S3 từ ruby
- 14. Làm thế nào để tải một tập tin dưa có chứa một từ điển với các ký tự unicode?
- 15. Làm thế nào để tải dữ liệu từ một tập tin, cho một bài kiểm tra đơn vị, trong python?
- 16. Ruby: làm thế nào để "yêu cầu" một tập tin từ thư mục làm việc hiện tại?
- 17. làm thế nào để tải một tập tin Javascript để ray html ERB
- 18. Làm thế nào tôi có thể tiêm một bean vào một ApplicationContext trước khi nó tải từ một tập tin?
- 19. Tải tập tin từ URL về một chuỗi
- 20. Lưu và tải MemoryStream vào/từ một tập tin
- 21. Làm thế nào để xóa một dòng từ một tập tin văn bản trong C#?
- 22. PowerShell: làm thế nào để đánh giá một chuỗi đọc từ một tập tin
- 23. Làm thế nào để đọc một Unicode G-Clef (U + 1D11E) từ một tập tin?
- 24. Làm thế nào để xóa một dòng cụ thể từ một tập tin trong Unix?
- 25. làm thế nào để đọc một tập tin từ một webapp nâng
- 26. Làm thế nào để xác nhận một tập tin cấu hình Erlang từ một lệnh linux
- 27. Làm thế nào để ghi đè lên một file văn bản từ một tập tin batch
- 28. Làm thế nào để FTP một tập tin từ một Android Gradle xây dựng?
- 29. Làm thế nào để gửi một email đơn giản từ một tập tin thực thi Windows?
- 30. Làm thế nào để vượt qua một đối số khi gọi một tập tin xem?
Mặc dù đây là một lời giải thích tốt, tôi cho rằng việc đưa yaml hoặc json chỉ làm phức tạp một bài tập đơn giản. Tệp đã tồn tại và đã trở nên đơn giản như - một tệp văn bản được phân tách, một bản ghi trên mỗi dòng. Chỉ cần đọc các tập tin theo dòng, chia nhỏ nó, và xây dựng băm. – Jim
Cảm ơn bạn! Nó hoạt động hoàn hảo ngay bây giờ. – user1128637