1

私は、Ruby に移植したい Python の小さなスクリプトを持っています。これは、Ruby に対する私の無知を強調していると思います。予期しない END ステートメントがあるというエラーが表示されますが、どうしてそうなるのかわかりません。おそらく、END が必要なキーワードか、忘れていた END を必要としないキーワードがあるのでしょう。問題のある行に至るまでのすべてのコードを次に示します。問題のある行はコメント化されています。

begin
    require base64
    require base32
rescue LoadError
    puts "etext requires base32. use 'gem install --remote base32' and try again"
end

# Get a string from a text file from disk
filename = ARGV.first
textFile = File.open(filename)
text = textFile.read()

mailType = "text only" # set the default mailType

#cut the email up by sections
textList1 = text.split(/\n\n/)
header = textList1[0]

if header.match (/MIME-Version/)
    mailType = "MIME"
end

#If mail has no attachments, parse as text-only. This is the class that does this
class TextOnlyMailParser

    def initialize(textList)
        a = 1
        body = ""
        header = textList[0]
        @parsedEmail = Email.new(header)
        while a < textList.count
            body += ('\n' + textList[a] + '\n')
            a += 1
            end
        @parsedEmail.body = body
    end
end

def separate(text,boundary = nil)
    # returns list of strings and lists containing all of the parts of the email
    if !boundary #look in the email for "boundary= X"
        text.scan(/(?<=boundary=).*/) do |bound|
            textList = recursiveSplit(text,bound)
            end
        return textList
    end
    if boundary 
        textList = recursiveSplit(text,boundary)
    end
end


def recursiveSplit(chunk,boundary)
    if chunk.is_a? String
        searchString = "--" + boundary
        ar = cunk.split(searchString)
        return ar
    elsif chunk.is_a? Array
        chunk do |bit|
            recursiveSplit(bit,boundary);
        end
    end
end

class MIMEParser
    def initialize(textList)
        @textList = textList
        @nestedItems = []
        newItem = NestItem.new(self)
        newItem.value = @textList[0]
        newItem.contentType = "Header"
        @nestedItems.push(newItem)
        #setup parsed email
        @parsedEmail = Email.new(newItem.value)
        self._constructNest
    end

        def checkForContentSpecial(item)
        match = item.value.match (/Content-Disposition: attachment/)
        if match
            filename = item.value.match (/(?<=filename=").+(?=")/)
            encoding = item.value.match (/(?<=Content-Transfer-Encoding: ).+/)
            data = item.value.match (/(?<=\n\n).*(?=(\n--)|(--))/m)
            dataGroup = data.split(/\n/)
            dataString = ''
            i = 0
            while i < dataGroup.count
                dataString += dataGroup[i]
                i ++
            end #<-----THIS IS THE OFFENDING LINE
            @parsedEmail.attachments.push(Attachment.new(filename,encoding,dataString))
        end
4

1 に答える 1