技术标签: java解析定长文件入库
我想基于另一个文件中提供的记录布局来解析文件.
基本上会有一个定义文件,它是一个用逗号分隔的字段及其各自长度的列表.其中会有很多,每次我运行程序时都会加载一个新的.
firstName,text,20
middleInitial,text,1
lastName,text,20
salary,number,10
然后,我将显示一个带有提供的列标题的空白表,以及一个通过单击按钮或其他方式添加数据的选项-我尚未决定.
我还希望有一个选项,既可以从文件加载数据,也可以将数据保存到文件,文件匹配定义文件中描述的格式.
例如,要为上述定义文件加载的文件(或由保存功能生成的文件)可能看起来像这样.
Adam DSmith 50000
Brent GWilliams 45000
Harry TThompson 47500
什么样的模式在这里可能有用,谁能给我一些粗略的指导,以指导如何构建内部存储和建模数据的方式.
我想我可以找到有关Java文档的方法,但是,如果有人可以将我指向某个地方开始寻找,将不胜感激!
谢谢
解决方法:
因此,在我看来,您有一个howToParse文件和infoToParse文件,分别说明了如何解析信息以及在这些文件中解析信息的方向.
首先,我将阅读howToParse文件并创建某种动态Parser对象.看起来此文件中的每一行都是一个不同的ParsingStep对象.然后,您只需要读取将存储为String对象的行,并将ParsingStep分为3部分即可:字段名称,数据类型,数据长度.
// Create new parser to hold parsing steps.
Parser dynamicParser = new Parser();
// Create new scanner to read through parse file.
Scanner parseFileScanner = new Scanner(howToParseFileName);
// *** Add exception handling as necessary *** this is just an example
// Read till end of file.
while (parseFileScanner.hasNext()) {
String line = parseFileScanner.nextLine(); // Get next line in file.
String[] lineSplit = line.split(","); // Split on comma
String fieldName = lineSplit[0];
String dataType = lineSplit[1];
String dataLength = lineSplit[2]; // Convert to Integer with Integer.parseInt();
ParsingStep step = new ParsingStep(fieldName, dataType, dataLength);
dynamicParser.addStep(step);
}
parseFileScanner.close();
然后,您将具有如何解析一行的信息,然后只需解析另一个文件并将该文件中的信息存储在数组中即可.
// Open infoToParse file and start reading.
Scanner infoScanner = new Scanner(infoToParseFileName);
// Add exception handling.
while (infoScanner.hasNext()) {
String line = infoScanner.nextLine();
// Parse line and return a Person object or maybe just a Map of field names to values
Map personMap = dynamicParser.parse(line);
}
infoScanner.close();
然后,唯一的其他代码就是确保解析器以正确的顺序进行解析.
public class Parser {
private ArrayList steps;
public Parser() {
steps = new ArrayList();
}
public void addStep(ParsingStep step) {
steps.add(step);
}
public Map parse(String line) {
String remainingLine = line;
for (ParsingStep step : steps) {
remainingLine = step.parse(remainingLine);
}
return map; // Somehow convert to map.
}
}
就个人而言,我将在解析步骤中添加一些错误检查,以防infoToParse文件格式不正确.
希望这可以帮助.
标签:data-structures,file-io,java,parsing
来源: https://codeday.me/bug/20191208/2089049.html
安装Mysql 后,命令符无法登陆。You must reset your password using ALTER USER statement before executing this statement.①使用临时密码登录后,需及时更改ROOT密码。临时密码在解压文件中,在mysql-8.0.18-winx64\data文件侠下,AUTOBVT-FL85VRK.err文件打开。..._mysql带密码登录
1.下载cmake-3.12.2.tar.gz:wget https://github.com/Kitware/CMake/releases/download/v3.13.2/cmake-3.13.2.tar.gz2.解压:tar -zxvfcmake-3.13.2.tar.gz3、进入解压目录:cdcmake-3.13.24、执行命令指令安装:./bootstrap &a..._找不到命令 “camke”,您的意思是: “cmake” 命令来自 snap 软件包 cmake (3.27.
计算机二级考试不是人工阅卷,是由计算机评分,所以是很严格的。计算机二级机器阅卷主要看的是最后的输出文件,如果步骤错了导致结果不正确的话,也是没有分的。计算机二级评分标准计算机二级考试是电脑自动评分的,即上机考试的成绩由考生交卷后由计算机直接评分给出,机器阅卷,由电脑会记录考生的操作步骤和保存的结果,自动和自身的数据库答案做匹配。成绩等第分为优秀、良好、及格、不及格四等。100-90分为优秀,89-..._计算机二级access查询是看操作还是结果
//将POI的宽度转换为Excel的宽度 如果是px:像素 1.Float.parseFloat(value) 2.Float.parseFloat(value) * 37F 3.Math.round(Float.parseFloat(value) * 37F) 4. int v=0;//初始化值 v = Math.round(Float.parseFloat(value) * 37F
用于客户端使用的共享库(如应用程序或其他库)中包含的符号——函数、变量或类——必须以特殊方式标记。这些符号被称为公共符号,它们被导出或公开可见。其余的符号从外部不应该可见。Q_DECL_EXPORT:必须添加到编译共享库时使用的符号声明中。Q_DECL_EXPORT:在编译使用共享库的客户端时,必须将Q_DECL_IMPORT添加到符号声明中。在QtCreator+Qt的情况下用MinGW编译出来一般有.dll和.a,假如编译出来一个myplunge.dll,那么另外一个.a文件就是libmypl_q_decl_export
axis不能生成server-config.wsdd文件
1 案例说明最近一直在用 MySQL 数据库演示基础功能,但是这两天忽然出现了一个问题,那就是:在启动 MySQL 服务端并输入密码后,出现闪退现象。之后,在网上搜了搜,发现出现这种问题很常见,大多数原因可能是在咱们使用安全软件的时候,无意中关闭了 MySQL 服务。此外,如果 MySQL 服务已经启动了,但还是出现了闪退的现象,那就可能是 MySQL 的配置出现了问题。2 解决方案在出现上述问题的_mysql数据库输入密码闪退
递归实现指数型枚举做题思路创建一个空间存储要便利的个数状态如要枚举3个数的所有排列组合,那要创建三个空间,来存储每个数的状态开始枚举要枚举三个数的所有组合,那么就要便利所有的情况,那么每一个数都有选和不选两种情况所以每一个数都要分两种情况进行递归最后终止的条件是枚举的个数不超过三个(三个数进行枚举,可选可不选,所以所选择的个数可以是1~3个)理解采用递归的思路,就是:看要枚举几个数,几个数他递归的层数就是几层因为每个数只有选和不选两种情况,所以他的分支只有两个,是一个二叉_递归实现指数型枚举
方法一:插入之后比较var arr = [1,3,5,6,7,9]; /*function input(arr,n){ for(var i = 0;i < arr.length;i++){//遍历数组 if(arr[i]>=n){ arr.splice(i,0,n);//插入数字 break; } } if(n..._js有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
转载于:https://www.cnblogs.com/starstarstar/p/10686195.html
来源:科研大匠大家都在反对学术不端,何为学术不端?如何界定学术不端行为?其实,此前并没有一个明确的标准。2019年5月29日,国家新闻出版署才正式发布我国首个针对学术不端行为的行业标准—...
加拿大大学开设的交互设计专业非常受欢迎,因为加拿大这门艺术类交叉学科,重视学生实践能力培养,在校就有丰富的实习机会可以练手。同时也在重点培养学生的设计和审美能力。如果你对这门专业感兴趣,今天小编就为大家整理了加拿大SFU交互设计专业为什么火,希望对你有所帮助,有任何问题都可以咨询IDP留学顾问哦!SFU交互设计专业学制:4年专业亮点:西蒙菲莎大学SFU是加拿大少有的开设“交互设计”专业的大学之一,...