现在考虑两个输入文件
1.post_tran.tbl (已编辑的表格)
[name]post_tran_id[/name]=[data] 1[/data]
[name]tran_nr[/name]=[data]2[/data]
[name]datetime_tran_local[/name]=[data]2002-04-02 19:02:28[/data]
[name]system_trace_audit_nr[/name]=[data]008497[/data]
[name]settle_amount_rsp[/name]=[data]4120[/data]
[name]settle_tran_fee_rsp[/name]=[data]10[/data]
[name]post_tran_cust_id[/name]=[data] 2[/data]
[name]prev_post_tran_id[/name]=[data] 0[/data]
[name]next_post_tran_id[/name]=[data]0[/data]
[name]message_type[/name]=[data]0200[/data]
[name]post_tran_id[/name]=[data] 2[/data]
[name]tran_nr[/name]=[data]2[/data]
[name]datetime_tran_local[/name]=[data]2002-04-02 19:02:28[/data]
[name]system_trace_audit_nr[/name]=[data]008497[/data]
[name]settle_amount_rsp[/name]=[data]4120[/data]
[name]settle_tran_fee_rsp[/name]=[data]10[/data]
[name]post_tran_cust_id[/name]=[data] 2[/data]
[name]prev_post_tran_id[/name]=[data] 0[/data]
[name]next_post_tran_id[/name]=[data]0[/data]
[name]message_type[/name]=[data]0200[/data]
2.post_tran_cust.tbl
[name]post_tran_cust_id[/name]=[data]1[/data]
[name]source_node_name[/name]=[data]TestSrc[/data]
[name]draft_capture[/name]=[data]0[/data]
[name]pan[/name]=[data]5892790010003952[/data]
[name]card_seq_nr[/name]=[data]NULL[/data]
[name]expiry_date[/name]=[data]0415[/data]
[name]post_tran_cust_id[/name]=[data]2[/data]
[name]source_node_name[/name]=[data]SrcDec[/data]
[name]draft_capture[/name]=[data]1[/data]
[name]pan[/name]=[data]5892790010003952[/data]
[name]card_seq_nr[/name]=[data]890[/data]
[name]expiry_date[/name]=[data]0816[/data]
这些是我需要处理的示例文件。下面是示例代码。代码包含2个哈希映射。
一个hashmap用于post_tran.tbl,其中包含前两行的数据值作为hashmap的键,value是前两行的相应整个记录。第二个hashmap是post_tran_cust,它包含第一行的数据值作为hashmap的键,value是第一行的相应整个记录。
现在我想比较键(对于第一个hashmap我只需要post_tran_cust_id)
在两个哈希映射上,即hashmap1和post_tran_cust_id的post_tran_cust_id
来自hasmp2。如果存在匹配则从中获取相应的记录
两个hashmaps都要写入file.Kindly帮助我。
这是我的代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
public class Migrator {
void migrate(String post_tran, String post_tran_cust) throws IOException {
Map<String, Map<String, String>> h1 = loadFile(post_tran, KEY1);
Map<String, Map<String, String>> h2 = loadFile(post_tran_cust,
KEY2);
// System.out.println("Hash Post_Tran................\n: " + h1);
// System.out.println("Hash Post_Tran_Cust................\n: " +
h2);
PrintStream out = new
PrintStream("D:\\Postcard_workspace_new\\Final\\final.tbl");
// PrintStream out = System.out; // Used during testing
for (Map.Entry<String, Map<String, String>> entry : h1.entrySet()) {
Map<String, String> data = entry.getValue();
if (h2.containsKey(data.get(KEY2))) {
print(out, KEY1, data.get(KEY1));
print(out, KEY2, data.get(KEY2));
// Print remaining rows in any order
for (String key : data.keySet()) {
if ( ! key.equals(KEY1) && ! key.equals(KEY2) ) {
print(out, key, data.get(key));
}
}
data = h2.get(data.get(KEY2));
for (String key : data.keySet()) {
if ( ! key.equals(KEY2) ) {
print(out, key, data.get(key));
}
}
out.println(); // Record separator
}
}
}
private Map<String, Map<String, String>> loadFile(String fileName, String
key) throws IOException {
Map<String, Map<String, String>> result = new HashMap<String,
Map<String, String>>();
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line;
do {
Map<String, String> data = new HashMap<String, String>();
while ((line = br.readLine()) != null && !line.isEmpty()) {
data.put(getKey(line), getData(line));
}
result.put(data.get(key), data);
} while (line != null);
br.close();
return result;
}
public static void main(String[] args) throws IOException {
Migrator mg = new Migrator();
mg.migrate("post_tran.tbl","post_tran_cust.tbl");
}
}
答案 0 :(得分:0)
以下假设空行实际上是空的,即没有空格等,并且开头没有空行。
由于我现在更了解你正在尝试做什么,我在这次更新中重新制作了很多逻辑。
没有特定的错误处理来简化它。
System.nanoTime()