'2011/02'에 해당되는 글 3건

  1. 2011.02.07 [bash] cat 구문에 대한 부분 추출 및 분석 방법
  2. 2011.02.07 [ruby] cat 구문에 대한 대처 / cat의 tab구문을 이용하는 방법 (1)
  3. 2011.02.07 [ruby] httpConnection use to read xml / 외부 XML 정보 읽어오기 (2)


앞서 Ruby에 대해서 살펴 보았는데 이번에는 bash 환경입니다.
여기에서는 tab으로 구분된 구분자중에서 2번과 4번 항목을 읽어들여 내부적으로 산술 연산을
하는 부분입니다.

shell 의 목적은 파일사이즈를 모두 합쳐주는것 입니다.

#!/bin/bash


docidG= ""
filesizeG= 0
for docinfo in `cat docsize.txt | awk '{print $2"|"$4}'`
do
        #echo $docinfo
        docid=`echo $docinfo | awk -F"|" '{print $1}'`
        filesize=`echo $docinfo | awk -F"|" '{print $2}'`

         if [ "$docid" == "$docidG" ]; then
            #filesizeG= $filesizeG + $filesize
            let "filesizeG = $filesizeG + $filesize"    >> 산술연산
        else
            echo "$docidG : $filesizeG"
            docidG=$docid
            filesizeG=$filesize
        fi

done


보다 자세한 가이드는
아래를 확인하시면 되겠습니다. ^^
http://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/




저작자 표시 비영리 변경 금지
신고


외부에 있는 txt파일을 ruby에서 읽어들이면
간혹 분명 1줄인데 줄바꿈으로 읽어들이는 경우가 있습니다.
이경우 숨어있는 \t 문자열이 포함 되었기 때문인데 이것을 ruby 에서 split 구문을 이용하면
분석하는데 용이하답니다.

 for docinfo in `cat doc.txt`
                #"#{docinfo}".strip.each('\t\r'){ |info|
                info = "#{docinfo}".split("\t")
                hdb = info[0]
                docid = info[1]
                docno = info[2]
                docurl = info[3]
 

   docsize = callxml(docurl)
     puts "#{hdb}    #{docid}   #{docno}   #{docsize}  #{docurl}"
end











 

 for docinfo in `cat doc.txt`
                #"#{docinfo}".strip.each('\t\r'){ |info|
                info = "#{docinfo}".split("\t")
                hdb = info[0]
                docid = info[1]
                docno = info[2]
                docurl = info[3]

    docsize = callxml(docurl)
     puts "#{hdb}    #{docid}   #{docno}   #{docsize}  #{docurl}"
end

저작자 표시 비영리 변경 금지
신고


● Target XML

<?xml version="1.0" encoding="UTF-8"?>
<result>
 <header>
  <response_code>201</response_code>
 </header>
 <item>
  <fileinfo>
   <property name="realname"><![CDATA[달려라네오.doc]]></property>
   <property name="filesize"><![CDATA[45241]]></property>
   <property name="mimetype"><![CDATA[application/pdf]]></property>
   <property name="width"><![CDATA[0]]></property>
   <property name="height"><![CDATA[0]]></property>
  </fileinfo>
 </item>
</result>




● RubySource

require "net/http"
require "rexml/document"

...
.....
........
        def callxml(docurl)
            if docurl == nil
                return 0
            end

            pdfsize = 0

            begin
            xml_req = Net::HTTP.get_response(URI.parse("#{docurl}")).body
            #puts "#{xml_req}"   << XML의 모든 내용을 출력합니다.

            doc = REXML::Document.new(xml_req)
            doc.elements.each('result/item/fileinfo/property') do |ele|
                #propertys << ele.elements['property']
                #puts ">>> #{ele.elements.text}"
                #puts ">>> #{ele.elements.attributes.values}"

                #puts ">>> #{ele.name}"
                #puts ">>> #{ele.attributes}"
                #puts ">>> #{ele.attributes.values}"
                #puts ">>> #{ele.elements['property'].text}"
                #puts ">>> #{ele.elements['property'].attributes.value}"
                #puts ">>> #{ele.elements['filesize'].text}"

                if "#{ele.attributes.values}" == "filesize"
                    pdfsize = ele.text
                end
            end

........


#으로 처리된곳은 주석입니다.   
   XML 을 분석하는 과정에서 값이 무엇이 찍히는지 보기 위해 디버깅한 코드로 보시면 되겠네요.
원하는것은 fileSize  찾는것인데 우휴.. 생각보다 시간이좀 걸렸답니다.

아차! HTTP와 REXML 을 사용하기 위해서는  import 해야하는 자원도 잊어서는 안되죠!!
require "net/http"
require "rexml/document"
2줄을 최상위에 선언 해야 되겠습니다. 그리고 class도 만들어서 사용 해야 되요.. ^^




저작자 표시 비영리 변경 금지
신고
1 

글 보관함

카운터

Total : 578,969 / Today : 92 / Yesterday : 125
get rsstistory!