如何允许自定义格式处理文件数据(正则?模板?)

a90434957 2018-06-20 08:59:10
公司有几种扫码枪 读出来的内容格式都不一样.

先说数据结构 Row(单号,条码,datetime)

我想加一个允许用户自定义修改读取模板的功能

比如 先建立四种类型 #{id},#{barcode},#{dateTime},#{date} (最后一个有扫码枪读的没有时间)

"#{id},#{barcode},#{date}" 或者 "#{barcode};#{id};#{dateTime}" 这种形式 用户自定义分隔符,自定义顺序, 来提取每一行的数据.

最好还能自定义时间格式?

不一定要#{id} ,只是参考一下模板引擎的格式而已, 我也没想好如何给用户编辑模板

但是我应该怎么做呢, 不知道如何的思路来解决使用模板读取字符串
...全文
156 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
maradona1984 2018-06-21
  • 打赏
  • 举报
回复
没必要自己造轮子,直接用freemarker之类的模版引擎就能到达效果,甚至更好

freemarker也可以单独使用的,其实输出一个html和你这个本质上没啥区别
幽饮烛 2018-06-21
  • 打赏
  • 举报
回复
这种思路是可行的,处理的时候,先提取关键字,
接下来有两种情况:
1、关键字对应内容长度固定的
2、关键字对应内容长度不固定
第一种可以直接计算出下标,就可以截取字符串获取内容。
第二种相对麻烦,可以通过两个关键字之间的分隔符来查出内容的下标。

最偷懒的方法就是让用户输入一个符合规范的正则表达式。
stacksoverflow 2018-06-21
  • 打赏
  • 举报
回复
转换
给你个伪代码思路

class ScanParser{
Map<String,String> dataMap = new HashMap<String,String>();

public ScanParser(int type, String[] scanData){ //type为扫码枪类型,scanData为扫的数据
String[] nameTypes = getTemplate(type) //根据扫码枪类型获得模板,自己实现,比如三个元素的数组,
//每个元素名称和类别用逗号分割{id,char},{barcode,char},{scandate,datetime}
//scanData的长度应该和nameTypes的长度,顺序一致,自己做个检查
for(int i = 0; i < nameTypes.length; i ++){
String name = nameTypes.splite(",")[0];
String type = nameTypes.splite(",")[1]; //自己处理默认类别的情况,或者封装到一个类中
dataMap.put(name, convert(scanData[i],type)); //convert方法自己写
}
}

public String getId(){
return dataMap.get("id");
}
public String getBarcode(){
return dataMap.get("barcode");
}
public String getScandate(){
return dataMap.get("scandate");
}
}
stacksoverflow 2018-06-21
  • 打赏
  • 举报
回复
模板
存储格式固定的话 Row(单号,条码,datetime) 假定为这样 Row(id,barcode,scandate)
你需要做的是将前台输入的数据,扫码枪类别 根据模板规则 转化成存储格式 Row(单号,条码,datetime),持久化到存储介质,比如数据库中。
有了输入数据的每个元素对应的最终存储名称,格式(根据格式来做数据转换),即可完成这个转换过程。

所以,模板需要定义元素名称和元素格式。假设有三种存储格式,char,date,datetime,可以定义如下模板:
例:
{id,char},{barcode,char},{scandate,datetime}
或者
{id,char},{barcode,char}
或者
{barcode,char},{id,char},{scandate,date}

在以上基础上,可以做一些优化,比如默认为char格式的话,模板变成这样:
{id},{barcode},{scandate,datetime}

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧