2012-11-09 21 views
5

में स्ट्रिंग (लेखन त्रुटि) में StringIO कनवर्ट नहीं कर सकता जब मैं नीचे दिए गए कोड का उपयोग करें, मैं निम्न त्रुटि संदेश मिलता है: can't convert StringIO into String (TypeError)रूबी

array_of_lines = [] 
Zip::ZipInputStream::open(open("URL for zipped file", "rb")) do |io| 
    file = io.get_next_entry 
    puts "Downloading file #{file}" 
    array_of_lines = io.readlines 
    print "Downloaded ", array_of_lines.count, " elements.", "\n" 
end 

कोई मेरी मदद कर सकते हैं? अग्रिम धन्यवाद।

उत्तर

19

जो जानकारी आप पढ़ रहे हैं वह इतना छोटा है कि इसे स्ट्रिंगियो ऑब्जेक्ट में निहित किया जा सकता है। सामान्य रूप से ऐसा होता है कि चूंकि डेटा बहुत बड़ा हो जाता है (10KB के डिफ़ॉल्ट पर) ऑब्जेक्ट को बफर से बाहर निकाला जाता है और एक अस्थायी फ़ाइल में बदल जाता है, जिसे आप इसे पढ़ने के तरीके को पढ़ने के लिए आवश्यक होते हैं।

आपके पास दो विकल्प:
1. बड़ी फ़ाइलों
2. 0.

को openURI स्ट्रिंग बफर के लिए डिफ़ॉल्ट सेट डिफ़ॉल्ट बफर सेट करने के लिए से पढ़ा, तो आप एक प्रारंभकर्ता बना सकते हैं और लगाने की जरूरत है यह इस:

OpenURI::Buffer.send :remove_const, 'StringMax' 
OpenURI::Buffer.const_set 'StringMax', 0 

पहली पंक्ति वर्तमान बफर सेटिंग (10KB) और दूसरी पंक्ति 0.

के लिए सेट होगा टी मत भूलना नष्ट करेगा o अपने सर्वर को पुनरारंभ करें क्योंकि यह प्रारंभकर्ता है या कुछ भी नहीं बदलेगा। मुझे आशा है कि वह मदद करेंगे!

+2

यह मैं बचाया कॉल करने के लिए आवश्यक है। । । पीडीएफ को गठबंधन करने के लिए प्रोन का उपयोग कर रहा था और उत्पादन में मुझे "स्ट्रिंगियो को स्ट्रिंग में परिवर्तित नहीं किया जा सकता" त्रुटि मिलेगी। अपने समाधान का प्रयास किया (भले ही सीधे संबंधित नहीं है) और यह मेरी समस्या को जादू की तरह तय करता है। – bcb

+1

वाह। इस टिप के लिए धन्यवाद, एक गुच्छा मदद की! – manderson

+1

अच्छा हैक, धन्यवाद और +1 –

12

अभिव्यक्ति open("URL for zipped file", "rb") स्ट्रिंगियो, स्ट्रिंग नहीं देता है।

StringIO की सामग्री प्राप्त करने के लिए यह विधि read

string = open(url).read()