إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

po2sqlite3 0.8

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [سكربت] po2sqlite3 0.8

    السلام عليكم
    إصدار جديد لهذا السكربت البسيط:

    - الجديد:
    * التعامل مع المجلدات (مثلاً مجلد به عدة ملفات .po و نريد جمعهم في قاعدة بيانات واحدة)
    * إصلاح بعض الأخطاء و أشياء أخري جرب لتعرف :D

    كنت قد عدلت عليها من قبل و لكن في المستودع

    كود:
    [LEFT]
    #!/usr/bin/env ruby
    #po2sqlite3 : a simple .po => sqlite3 converter 
    # converts .po files to sqlite3 databse to use it in qamoos
    #author: abdelrahman ghanem <[email protected]>
    #license: Gpl v.2 or any later version
    require 'rubygems'
    require 'sqlite3'
    include SQLite3
    $KCODE="u"
    $VERSION=0.8
    
    $empty=/^msgid\s".*"\nmsgstr\s""\n/
    $msgid=/^msgid\s"(.*?)"/
    $msgstr=/^msgstr\s"(.*?)"/
    
    class Array
      def all_to_s
        #still ruby 1.8
        #in ruby 1.9 you may use proc#to_sym
        #self.map(&:to_s)
        self.map{|e|e.to_s}
      end
      
      def re_quotes
        #replace ' with '' to avoid sqlite error
        self.map{|arg|arg.gsub("'","''")}
      end
    end
    
    def get_wordlist(po)
      data=IO.read(po)
      data.gsub!($empty,"")
      msgids=data.scan($msgid).all_to_s.re_quotes
      msgstrs=data.scan($msgstr).all_to_s.re_quotes
      #this way is a better for avoiding duplications
      wordlist={}
      for i in 0...msgids.length
        msgid=msgids[i]
        msgstr=msgstrs[i]
        if wordlist.key?(msgid) and wordlist[msgid]!=msgstr
          wordlist[msgid]+="<br>"+msgstr
        else
          wordlist[msgid]=msgstr
        end
      end
      wordlist
      #this way is more shortened
      #Hash[*msgids.zip(msgstrs).flatten]
    end
    
    def to_db(wordlist,outdb)
      db  = Database.new(outdb)
      db.execute("create table wordlist (en TEXT,ar TEXT)")
      db.transaction
      i=0
      wordlist.each do |k,v|
        yield(i+=1)
        db.execute("insert into wordlist (en,ar) values('#{k}','#{v}')")
      end
      db.commit
      db.close
    end
      
    def convert(wordlist,outdb)
      puts "Please wait, converting may take awhile..."
      total=wordlist.length
      to_db(wordlist,outdb) do |pos|
        per=(((pos.to_f/total)*10000).round.to_f)/100
        print "\rConverting....#{per}% [#{pos}/#{total} Entry]"
      end
      print "\nDone, [#{total}] entries added to '#{outdb}'.\n"
    end
    
    def start(recursive=false)
      po,db=$*[0],$*[1]
      File.delete(db) if File.exists?(db)
      puts "Getting .po file(s) data..."
      total_wordlist={}
      if File.directory?(po)
        Dir.chdir(po) do 
          if recursive
            Dir['**/*.po']
          else
            Dir['*.po']
          end
        end.each do |po_file|
          total_wordlist.merge!(get_wordlist(po_file))
        end
      else
        total_wordlist=get_wordlist(po)
      end
      puts "Got [#{total_wordlist.length}] entries."
      convert(total_wordlist,db)
    end
    
    def usage
      $stderr.puts "#{$0} [po or dir] [outdb] [-r=recursive]"\
          "\n  note: -r is a directory related option"
    end
    
    if $0==__FILE__
      begin
        if $*.length<2
          usage
          raise 'argument error' 
        end
        $stdout.sync=true
        start($*.include?("-r"))
      rescue => e
        raise e.message
      end
    end
    [/LEFT]
    الاستخدام:
    كود:
    [LEFT]po2sqlite3.rb [po or dir] [outdb] [-r=recursive][/LEFT]
    ربما تنسخها إلي
    كود:
    [LEFT]/usr/bin[/LEFT]
    لتستخدمها مباشرة




    مثلاً حملت arabeyes wordlist من هنا
    و استخرجت الملفات إلي
    كود:
    [LEFT]/home/myhome[/LEFT]
    لتحويل ملف full_wordlist_A.po مثلاً داخل المجلد wordlist


    كود:
    [LEFT]po2sqlite3.rb /home/myhome/wordlist/full_wordlist_A.po /home/myhome/dbs/full_wordlist_A.db[/LEFT]
    لتحويل الملفات جميعاً داخل wordlist فقط

    كود:
    [LEFT]po2sqlite3.rb /home/myhome/wordlist /home/myhome/dbs/wordlist.db[/LEFT]
    لتحويل الملفات جمبعاً داخل المجلد wordlist و المجلدات الفرعية تستخدم الخيار -r

    كود:
    [LEFT]po2sqlite3.rb /home/myhome/wordlist /home/myhome/dbs/wordlist.db -r[/LEFT]
    اضغط على الصورة لعرض أكبر. 

الإسم:	po2sqlite3.jpg 
مشاهدات:	1 
الحجم:	26.1 كيلوبايت 
الهوية:	850141

    مرفق
    الملفات المرفقة
يعمل...
X