zoukankan      html  css  js  c++  java
  • txt 开关 csv 可通用 工具


    Ruby Txt 开关 CSV 常用工具


    to



    require 'csv'
    
    
    namespace :sys_file_conver do
    
    
      desc "把txt数据导入到csv中"
      task :txt_to_csv => :environment do
          amount = 100
          head_hash = {
            '对账文件名'  =>[12],
            '商户号'       =>[15],
            '商户类型'     => [4],
            '清算日期'     => [8],
            '总比数'       => [12],
            '总金额'       => [15, amount],
            '支付总比数'    => [12],
            '支付总金额'    => [15, amount],
            '退款总比数'    => [12],
            '退款总金额'    => [15, amount],
            '撤销总比数'    => [12],
            '撤销总金额'    => [15, amount]
          }
    
    
          body_hash = {
            '清算日期'    =>  [8],
            '入账日期'    =>  [8],
            '卡号'        =>  [19],
            '交易类型'    => [4],
            '交易金额'    => [ 15, amount],
            '入账金额'    => [ 15, amount],
            '手续费金额'  => [ 15, amount],
            '流水号'     => [6],
            '交易日期时间'  => [10],
            '终端号'     => [8],
            '商户号'     => [15],
            '商户类型'    => [4],
            '受理机构号'  => [6],
            '系统检索号'  => [12],
            '授权号'     => [6],
            '渠道类型'    => [2],
            '支付卡种'    => [2],
            '订单号'     => [40]
          }
    
    
          txt_file_path = ENV['txt_file_path'] || "#{Rails.root}/tmp/txt_file.txt"
    
    
          csv_file_path = ENV['csv_file_path'] || "#{Rails.root}/tmp/csv_file.csv"
          File.new(csv_file_path) if FileTest::exists?(csv_file_path)
    
    
          CSV.open(csv_file_path,'wb:gbk:gbk') do |data| # wb:gbk:gbk to gbk default encoding is utf-8
            data << hash_to_array_value(head_hash)
    
    
            txt_array = IO.readlines(txt_file_path, :encoding => 'GB2312')
            txt_array.each_with_index do |str,index|
              case index
              when 0
                data << str_to_array_by_hash(str,head_hash)
                data << hash_to_array_value(body_hash)
              else
                data << str_to_array_by_hash(str,body_hash)
              end  
            end
          end
      end
    # ----------------------------Hash to array------------------------------------
    def str_to_array_by_hash(str,hash)
      array = []
      hash_to_array_value(hash, 1).inject(0){ |idx, code|
    
    
        str_code = str[idx,code[0]]
        str_code = str_code.to_f/code[1] unless code[1].blank?
        array << convert_gbk(str_code)
        idx+code[0]
      }
    
    
      array
    end
    
    
    # def hash_to_array_key(hash)
    #   hash.inject([]){|a,d| a << convert_gbk(d[0])}
    # end
    def hash_to_array_value(hash,i=0)
      hash.inject([]){|a,d| a << convert_gbk(d[i])}
    end
    
    
    # ---------------------------Convert util--------------------------------------  
    def convert(str)
    require 'iconv'
    begin
    converter = Iconv.new("UTF-8", "GB2312")
    converter.iconv(str)
    rescue
    str
    end
    end
    
    def convert_gbk(str)
    require 'iconv'
    begin
    converter = Iconv.new("GB2312", "UTF-8")
    converter.iconv(str)
    rescue
    str
    end
    end
    
    
    end

    Html form tag

    .upload-body
      = form_tag upload_file_file_converts_url, :multipart => true do
        %p
          %span.label 上传文件
          = file_field :public, :picture
    
        %p
          %input.button.ml20{ :type => 'submit', :value => '转码' } 
    



    controller upload to download

      #iconv -f gbk csv_file.csv 
      def upload_file
        uploaded_io = params[:public][:picture] 
        
        file = File.join("public", uploaded_io.original_filename)
        FileUtils.cp uploaded_io.path, file
        send_file FileConvert.txt_convert_csv(file),:filename => "CSV-#{uploaded_io.original_filename} #{Time.now.strftime('%F %T')}.csv"
      end
    




    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    CentOs上安装Oracle 10g
    多线程更新form
    C#中写INI文件的方法
    C语言的函数大全,参数列表,数字的81016进制转换
    CCS 3.3 操作C函数读写文件
    关于XML文档读写
    关于MathType的一些用法
    DateTime Proc
    拖拽获得文件路径
    用事件进行窗口间参数传递
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4638203.html
Copyright © 2011-2022 走看看