BlackHatSamurai
BlackHatSamurai

Reputation: 23503

Reading file with Ruby returns strange output

I am trying to read in a JSON file with Ruby and the output is extremely strange. Here is the code that I am using:

require 'rubygems'

class ServiceCalls 

    def initialize ()

    end

    def getFile()

        Dir.entries('./json').each do |mFile|

            if mFile[0,1] != "."
                self.sendServiceRequest(mFile)
            end

        end
    end

    def sendServiceRequest(mFile)
        currentFile = File.new("./json/" + mFile, "r") 
        puts currentFile.read
        currentFile.close
    end



end

mServiceCalls = ServiceCalls.new
mServiceCalls.getFile

And here is the output:

Macintosh H??=A?v?P$66267945-2481-3907-B88A-1094AA9DAB6D??/??is32???????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz???????????????????????????????????????????????????????????s8m+88888888???????89????????99?????????9:??????????:;??????????;=??????????=>??????????>????????????@??????????@A??????????AC??????????CD??????????DE??????????EE??????????E6OXdknnkdXO6ic118?PNG
bookmark88?A[DT>??A?@
                     ApplicationsMAMPhtdocsServiceTestAutomationMDXservicecatalog-verizon.json$4T??
                  `?
                   U?????l??????
                                Macintosh H??=A?v?P$66267945-2481-3907-B88A-1094?is32???????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz???????????????????????????????????????????????????????????s8m+88888888???????89????????99?????????9:??????????:;??????????;=??????????=>??????????>????????????@??????????@A??????????AC??????????CD??????????DE??????????EE??????????E6OXdknnkdXO6ic118?PNG
UIEvolutions-MacBook-Pro-109:MDXServiceTesting Banderson$ ruby testmdxservices.rb
bookmark88?A?,P>??A?@
                     ApplicationsMAMPhtdocsServiceTestAutomationMDXservicecatalog-adaptation.json$4T??
                     `?
                      U?????l??????
                                   Macintosh H??=A?v?P$66267945-2481-3907-B88A-1094AA9DAB6D??/?<icns<?TOC his32?s8mic118il32?l8mic1?ic07ic13#ic08#ic14^?ic09_ic1?is32???????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz???????????????????????????????????????????????????????????s8m+88888888???????89????????99?????????9:??????????:;??????????;=??????????=>??????????>????????????@??????????@A??????????AC??????????CD??????????DE??????????EE??????????E6OXdknnkdXO6ic118?PNG

IHDR szz?iCCPICC Profile(?T?k?P??e???:g >h?ndStC??kW??Z?6?!H??m\??$?~?ًo:?w?>?
                                                                             كo{?a???"L?"???4M'S??????9'??^??qZ?/USO???????^C+?hM??J&G@Ӳy???lt?o߫?c՚?
                                                                    ? ??5?"?Y?i\?΁?'&??.?<?ER/?dE?oc?ግ#?f45@?   ??B:K?@8?i??
                  ??s??_???雭??m?N?|??9}p?????_?A??pX6?5~B?$?&???ti??e??Y)%$?bT?3li?
    ??????P???4?43Y???P??1???KF????ۑ??5>?)?@????r??y??????[?:V???ͦ#??wQ?HB??d(??B
                                                                               a?cĪ?L"J??itTy?8?;(???Gx?_?^?[???????%׎??ŷ??Q???麲?ua??n?7???
                                                           Q???H^e?O?Q?u6?S??u
                                                                              ?2??%vX
     ???^?*l
O?????ޭˀq,>??S???%?L??d????B???1CZ??$M??9??P
                                            'w????\/????]???.r#???E|!?3?>_?o?a?۾?d?1Z?ӑ???z???'?=??????~+??cjJ?tO%mN?????
                                         |??-???bW?O+
o?
  ^?
    I?H?.?;???S?]?i_s9?*p???.7U^??s.?3u?

Can someone please tell me what I am doing wrong? Do I need to specify what type of encoding I'm using? I have tried to read the file with gets, sysread, and another I can't remember.

Upvotes: 0

Views: 256

Answers (2)

Charles Caldwell
Charles Caldwell

Reputation: 17189

I am not completely sure why but I believe it is the './json' path that is causing the issue. I tried the script on my Windows XP machine and got similar results.

However, when I rewrote the script to include File.dirname(__FILE__) instead of './' it worked. I also cleaned up some of the code.

class ServiceCalls 

    def get_file
        dirname = File.join(File.dirname(__FILE__), 'json')
        Dir.entries(dirname).each do |file|
            unless file.start_with? '.'
                File.open(File.join(dirname, file), 'r') {|f| puts f.read}
            end
        end
    end
end

sc = ServiceCalls.new
sc.get_file

__FILE__ is the path of the current script. File.join uses system independent path separators. File.open, if you pass it a block, will actually close the file for you when it completes the block. String#start_with? is a cleaner way than using [0,1] to get the first element of a string.

Upvotes: 1

user904990
user904990

Reputation:

try this:

Dir.entries('./json').each do |mFile|
  next if ['.', '..'].include?(mFile)
  self.sendServiceRequest(mFile)

Upvotes: 0

Related Questions