Ruby Txt 开关 CSV 常用工具

to

  1. require 'csv'
  2.  
  3. namespace :sys_file_conver do
  4.  
  5. desc "把txt数据导入到csv中"
  6. task :txt_to_csv => :environment do
  7. amount = 100
  8. head_hash = {
  9. '对账文件名' =>[12],
  10. '商户号' =>[15],
  11. '商户类型' => [4],
  12. '清算日期' => [8],
  13. '总比数' => [12],
  14. '总金额' => [15, amount],
  15. '支付总比数' => [12],
  16. '支付总金额' => [15, amount],
  17. '退款总比数' => [12],
  18. '退款总金额' => [15, amount],
  19. '撤销总比数' => [12],
  20. '撤销总金额' => [15, amount]
  21. }
  22.  
  23. body_hash = {
  24. '清算日期' => [8],
  25. '入账日期' => [8],
  26. '卡号' => [19],
  27. '交易类型' => [4],
  28. '交易金额' => [ 15, amount],
  29. '入账金额' => [ 15, amount],
  30. '手续费金额' => [ 15, amount],
  31. '流水号' => [6],
  32. '交易日期时间' => [10],
  33. '终端号' => [8],
  34. '商户号' => [15],
  35. '商户类型' => [4],
  36. '受理机构号' => [6],
  37. '系统检索号' => [12],
  38. '授权号' => [6],
  39. '渠道类型' => [2],
  40. '支付卡种' => [2],
  41. '订单号' => [40]
  42. }
  43.  
  44. txt_file_path = ENV['txt_file_path'] || "#{Rails.root}/tmp/txt_file.txt"
  45.  
  46. csv_file_path = ENV['csv_file_path'] || "#{Rails.root}/tmp/csv_file.csv"
  47. File.new(csv_file_path) if FileTest::exists?(csv_file_path)
  48.  
  49. CSV.open(csv_file_path,'wb:gbk:gbk') do |data| # wb:gbk:gbk to gbk default encoding is utf-8
  50. data << hash_to_array_value(head_hash)
  51.  
  52. txt_array = IO.readlines(txt_file_path, :encoding => 'GB2312')
  53. txt_array.each_with_index do |str,index|
  54. case index
  55. when 0
  56. data << str_to_array_by_hash(str,head_hash)
  57. data << hash_to_array_value(body_hash)
  58. else
  59. data << str_to_array_by_hash(str,body_hash)
  60. end
  61. end
  62. end
  63. end
  64. # ----------------------------Hash to array------------------------------------
  65. def str_to_array_by_hash(str,hash)
  66. array = []
  67. hash_to_array_value(hash, 1).inject(0){ |idx, code|
  68.  
  69. str_code = str[idx,code[0]]
  70. str_code = str_code.to_f/code[1] unless code[1].blank?
  71. array << convert_gbk(str_code)
  72. idx+code[0]
  73. }
  74.  
  75. array
  76. end
  77.  
  78. # def hash_to_array_key(hash)
  79. # hash.inject([]){|a,d| a << convert_gbk(d[0])}
  80. # end
  81. def hash_to_array_value(hash,i=0)
  82. hash.inject([]){|a,d| a << convert_gbk(d[i])}
  83. end
  84.  
  85. # ---------------------------Convert util--------------------------------------
  86. def convert(str)
  87. require 'iconv'
  88. begin
  89. converter = Iconv.new("UTF-8", "GB2312")
  90. converter.iconv(str)
  91. rescue
  92. str
  93. end
  94. end
  95.  
  96. def convert_gbk(str)
  97. require 'iconv'
  98. begin
  99. converter = Iconv.new("GB2312", "UTF-8")
  100. converter.iconv(str)
  101. rescue
  102. str
  103. end
  104. end
  105.  
  106. end

Html form tag

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

controller upload to download

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

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

txt 开关 csv 可通用 工具的更多相关文章

  1. 【游戏开发】Excel表格批量转换成CSV的小工具

    一.前言 在工作的过程中,我们有时可能会面临将Excel表格转换成CSV格式文件的需求.这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就 ...

  2. txt文件按行处理工具类(可以截取小说、分析日志等)【我】

    txt文件按行处理工具类(可以分析日志.截取小说等) package file; import java.io.BufferedReader; import java.io.BufferedWrite ...

  3. 预读(读取文件前几行)文件(txt,dat,csv等)程序

    需求: txt.dat.csv文件很大,需要花很长的时间打开, 但实际上我们只需要查看文件的前几行,查看数据的内容和格式 exe & code :  https://github.com/co ...

  4. save tracking results into csv file for oxuva long-term tracking dataset (from txt to csv)

    save tracking results into csv file for oxuva long-term tracking dataset (from txt to csv) 2019-10-2 ...

  5. solr6.6 导入 pdf/doc/txt/json/csv/xml文件

    文本主要介绍通过solr界面dataimport工具导入文件,包括pdf.doc.txt .json.csv.xml等文件,看索引结果有什么不同.其实关键是managed-schema.solrcon ...

  6. python读取txt、csv、xml

    读取txt,无需引入任何包: user_file = open('user_info.txt','r') lines = user_file.readlines() user_file.close() ...

  7. mysql将表数据导出为txt或csv文件

    语法:select 字段 from 表名 into outfile 路径 示例txt:select * from stu_class into outfile './stu_class.text'; ...

  8. 20171026python读取txt写入csv

    import csv def get_lines(filepath): with open(filepath) as file_object: lines=set(file_object.readli ...

  9. R语言学习——R读取txt、csv、xls和xlsx格式文件

    最近项目中运用到了R读取文件数据,所以把相关好用的.经过验证的方法总结了一下,有效避免下次入坑. 1. R读取txt文件 使用R读取txt文件直接使用read.table()方法进行读取即可,不需要加 ...

随机推荐

  1. 5月,专用程序猿的经典大作——APUE

    五一小长假刚刚过去,收回我们游走的心.開始你们的读书旅程吧! 本期特别推荐 经典UNIX著作最新版. 20多年来,这本书帮助几代程序猿写出强大.高性能.可靠的代码. 第3版依据当今主流系统进行更新,更 ...

  2. java提高篇(五)-----使用序列化实现对象的拷贝

          我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性 ...

  3. 【转】java JTable排序和过滤

    JTable排序 在Java SE 6中除了java.awt被更新外,javax.swing同时也有了很大的改进.在C/S程序中我们会经常使 用到"表".如我们可以在查询数据库后将 ...

  4. android 常见的解决(mdpi、hdpi 、xhdpi、xxhdpi )屏幕调整

    查询到执行的system service后,就能够在dumpsys后面加上service的名字,查看指定的service信息. adb shell dumpsys activity adb shell ...

  5. cocos2d-x lua 学习笔记(1) -- 环境结构

    Cocos2d-x 3.0超过环境的版本号来建立和前Cocos2d-x 2.0 差异较大的版本,从同时Cocos2d-x 3.0项目打包成apkAndroid的应用程序文件,步骤,构建环境有些乏味安德 ...

  6. Hadoop Hive sql 语法详细解释

    Hive 是基于Hadoop 构建的一套数据仓库分析系统.它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,能够将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...

  7. Python标准库简介

    在<Python语言参考手册>描述中的描述Python语法和语义,而本手冊主要介绍了Python标准库的内容和使用,也介绍了一些发行库里可选的组件库. Python标准库包括的内容是非常广 ...

  8. ExtJs4得知(五岁以下儿童)主要的Ext分类

    Ext类是ExtJs最常见的.最基本的类,它是一个全局对象,它封装了全班.辛格尔顿和 Sencha 该方法提供了一种有用的库. 嵌套在该命名空间中一个较低的水平最用户界面组件. 但是提供了很多有用的功 ...

  9. RDIFramework.NET ━ .NET高速信息系统开发框架钜献 V2.9 版本震撼发布

    RDIFramework.NET ━ .NET高速信息化系统开发框架钜献 V2.9 版本号震撼公布  全新体验.全新感觉.2015钜献! 继上个版本号"RDIFramework.NET V2 ...

  10. android开源应用(主要是博客上带有分析的)收集 【持续更新】

    2014.5.24更新: (android高仿系列)今日头条    http://blog.csdn.net/vipzjyno1/article/details/26514543 CSDN Andro ...