'Ruby'에 해당되는 글 18건

  1. 2011.02.07 [ruby] cat 구문에 대한 대처 / cat의 tab구문을 이용하는 방법 1
  2. 2011.02.07 [ruby] httpConnection use to read xml / 외부 XML 정보 읽어오기 2
  3. 2010.12.09 Ruby trim / 특정 문자열 제거
  4. 2009.12.08 Ruby TCPSocket 프로그래밍
  5. 2008.09.18 같은구문
  6. 2008.01.22 ruby에 mysql 드라이버 설치하기
  7. 2008.01.22 루비작업에 dbi transaction 설정하기
  8. 2008.01.18 ruby dbi 설정
  9. 2008.01.16 DBI 설치
  10. 2008.01.16 루비 리눅스 설치


외부에 있는 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도 만들어서 사용 해야 되요.. ^^





 
  for chid in `cat /neouser/work/test.txt`
                chid = chid.chomp("\n")
   end

물론 Document 찾아보면 주옥같은 정보가 있지만
이렇게 놔두면 애써 찾으로 가지 않아도 되죠 ^^
혹시 Document를 모른다면

http://ruby-doc.org/docs/ProgrammingRuby/


이곳이 루비문법에 대한 모든 궁금증을 해결하는 곳 입니다. ^^

루비를 이용한 TCPSocket 프로그래밍 예제입니다.
손에서 잠시 멀어지다 보니 이런것 하나 짜는데도 혼자 덜덜덜 이였네요.
역시 개발자는 개발을해야지 이거 감떨어지면 끝장입니다. 열심히 열심히!!

#!/usr/local/bin/ruby

require 'socket'

port = 80                           # Default HTTP port
list = File.new("/neouser.txt", "r")

while(line = list.gets)
    host = line.strip()
    path = ARGV[0].strip()

    if (host != nil and path != nil) then
        puts "---- remove cache #{host}#{path}----------------------------------"
        #request = "PURGE #{path} HTTP/1.0\r\nHOST: #{host}\r\n\r\n"
        request = "PURGE #{path} HTTP/1.0\r\nHOST: neouser.tet.url \r\n\r\n"

        socket = TCPSocket.open(host,port)  # Connect to server
        socket.print(request)               # Send request
        response = socket.read              # Read complete response
        puts response
    end
end



코드가 쉽다고 웃기게 보면 안됩니다.
이 코드에는 숨은 진실의 라인이 하나 있습니다.
TCPSocket의 경우 그 대상서버군에서 read 결과를 잘 못받는 경우가 있습니다.
해결책은 readline으로 중간중간 산출되는 결과를 받고 싶으면 그때마다 readline을 적여줘야 합니다.

        socket = TCPSocket.open(host,port)  # Connect to server
        socket.write(request)               # Send request
        socket.readline           # Read complete response
        socket.write("quit\r\n")            # Send request
        result = socket.readline           # Read complete response

몇줄 안되지만 결코 웃긴 코드는없습니다.




같은구문

Ruby/cookBook 2008. 9. 18. 17:42
 objCount = 1
    @image.each{|url|
     str = str + " <objectimageurl#{objCount}:" + escape(url) + ">\n"
     objCount = objCount +1
    }
    
#    @image.each do |url|
#     str = str + " <objectimageurl#{objCount}:" + escape(url) + ">\n"
#     objCount = objCount +1
#    end


ruby에 mysql 드라이버를 설치하는 방법

> gem 설치 이후 지우기
[neouserwork-1(neouser):/test/setupApp> gem install mysql
..
..
..

> ruby-mysql-0.2.6 다운로드
[neouserwork-1(neouser):/test/setupApp> ruby ./setup.rb
[neouserwork-1(neouser):/test/setupApp> ruby ./test.rb hostname user passwd
[neouserwork-1(neouser):/test/setupApp> ruby ./install.rb


> 이래도 안되면
마지막으로 이렇게 해도 안되면
/usr/local/lib/ruby/site_ruby 아래에 첨부파일을 풀어넣기 바랍니다.

  dbh['AutoCommit'] = false
   begin
     dbh.do("UPDATE account SET balance = balance - 50 WHERE name = 'bill'")
     dbh.do("UPDATE account SET balance = balance + 50 WHERE name = 'bob'")
     dbh.commit
   rescue
     puts "transaction failed"
     dbh.rollback
   end
   dbh['AutoCommit'] = true


모든 헬퍼의 시작 :
http://www.kitebird.com/articles/ruby-dbi.html

tranction 은 연속된 update나 delete와 같이 일련의 작업을 진행할때
반드시  사용해야하는 구문입니다.

사실 이런 자질구래한 설명은 위에 URL에 나와있습니다. 쩝~

> ruby dbi를 다운 로드 받습니다.
http://rubyforge.org/projects/ruby-dbi/


> 압축 해재
[neouserwork-1(neouser):/ko> tar xvfz dbi-0.1.1.tar.gz
ruby-dbi/
ruby-dbi/bin/
ruby-dbi/bin/commandline/
ruby-dbi/bin/commandline/sqlsh.rb
ruby-dbi/bin/PATHCONV
ruby-dbi/bin/proxyserver/
ruby-dbi/bin/proxyserver/proxyserver.rb
...


> 실행환경 설정
[neouserwork-1(neouser):/ko/ruby-dbi> ruby setup.rb config --with=dbd_ado,dbi,dbd_mysql,dbd_odbc,dbd_oracle


> setup실행
[neouserwork-1(neouser):/ko/ruby-dbi> ruby setup.rb setup


> setup실행 (root 권한)
[neouserwork-1(neouser):/ko/ruby-dbi> ruby setup.rb install

DBI 설치

Ruby 2008. 1. 16. 20:46

본 항목이 무슨 Ruby와 연관이 있을까 싶지만
Ruby를 가지고 crontab 에 걸어서 DB작업을 주기적으로 할때라면
DBI가 빠지고서는 이야기 하기 어렵기 때문이다.

DBI
 - Download : http://search.cpan.org/~timb/DBI/DBI.pm
 - FileName : DBI-1.601.tar.tar

[testwork-1(neouser):/neouser/DBI-1.601> ls
Changes  Driver.xst    Makefile.PL*  TASKS.pod      dbilogstrip.PL  dbivport.h    lib/
DBI.pm   Driver_xst.h  Perl.xs       TODO_2005.txt  dbipport.h      dbixs_rev.h   t/
DBI.xs   MANIFEST      README        dbd_xsh.h      dbiprof.PL      dbixs_rev.pl  test.pl*
DBIXS.h  META.yml      Roadmap.pod   dbi_sql.h      dbiproxy.PL     ex/           typemap


> 과정 1

[testwork-1(neouser):/neouser/DBI-1.601> perl Makefile.PL
**************************************************************************
  Perl versions below 5.6.1 are no longer supported by the DBI.
  Perl versions 5.6.x may fail during installation with a complaint
  about the use of =head3 in the pod documentation.
**************************************************************************
Press return to continue...


> 과정 2~4 (root 계정)


[testwork-1(neouser):/neouser/DBI-1.601> make
 ...
[testwork-1(neouser):/neouser/DBI-1.601> make test
 ...
[testwork-1(neouser):/neouser/DBI-1.601> make install



> 확인



루비 소스코드는 어디서 다운로드


루비의 소스코드는 (
http://www.ruby-lang.org/en/downloads/) 에서 다운로드 받을 수 있습니다. 루비의 현재 릴리즈 버전은 1.8.6입니다.
루비의 패키지 관리자인 루비젬은 (http://rubyforge.org/frs/?group_id=126) 에서 다운로드 받을 수 있습니다.


루비의 컴파일 방법 (Linux)

루비 소스코드를 다운로드 받은 후, 다음의 절차를 따르면 됩니다.
make install의 경우에는 root 를 하셔야 합니다 (user/local/에 접근하기 위해)

$ tar xzvf ruby-1.8.6.tar.gz
$ cd ruby-1.8.6
$ ./configure --prefix=/usr/local
$ make
$ make test
$ make install

루비젬의 설치

$ tar xzvf rubygems-0.9.2.tgz
$ cd rubygems-0.9.2
$ sudo /usr/local/bin/ruby setup.rb
1 2 

글 보관함

카운터

Total : / Today : / Yesterday :
get rsstistory!