我想取第 1 行和第 5 行,它们的用户名和日期相同,但在第 1 行它包含时间,在第 5 行它包含时间我想读取这两行并比较它以检查两行是否具有相同的用户名和日期,如果是这样,在其他文本文件或哈希图中将其打印为单行
像这样的例子:("sangeetha-May 02, 2013 , -in-09:48:06:61 -out-08:08:19:27
在 JAVA 中)
这是文本文件的内容:
line 1. "sangeetha-May 02, 2013 , -in-09:48:06:61
line 2. "lohith-May 01, 2013 , -out-09:10:41:61
line 3 . "sushma-May 02, 2013 , -in-09:48:06:61
line 4. "sangeetha-May 01, 2013 , -out-08:36:38:50
line 5. "sangeetha-May 02, 2013 , -out-08:08:19:27
line 6. "sushma-May 02, 2013 , -out-07:52:13:51
line 7. "sangeetha-Jan 01, 2013 , -in-09:27:17:52-out-06:47:48:00
line 8. "madhusudhan-Jan 01, 2013 , -in-09:38:59:31-out-07:41:06:40
以上数据是使用下面的代码生成的
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Map;
import java.util.TreeMap;
public class FlatFileParser
{
public static void main(String[] args)
{
// The stream we're reading from
BufferedReader in;
BufferedWriter out1;
BufferedWriter out2;
// Return value of next call to next()
String nextline;
try
{
if (args[0].equals("1"))
{
in = new BufferedReader(new FileReader(args[1]));
nextline = in.readLine();
while(nextline != null)
{
nextline = nextline.replaceAll("\\<packet","\n<packet");
System.out.println(nextline);
nextline = in.readLine();
}
in.close();
}
else
{
in = new BufferedReader(new FileReader(args[1]));
out1 = new BufferedWriter(new FileWriter("inValues.txt" , true));
out2 = new BufferedWriter(new FileWriter("outValues.txt"));
nextline = in.readLine();
HashMap<String,String> inout = new HashMap<String,String>();
while(nextline != null)
{
try
{
if (nextline.indexOf("timetracker")>0)
{
String from = "";
String indate = "";
if (nextline.indexOf("of in")>0)
{
int posfrom = nextline.indexOf("from");
int posnextAt = nextline.indexOf("@", posfrom);
int posts = nextline.indexOf("timestamp");
from = nextline.substring(posfrom+5,posnextAt);
indate = nextline.substring(posts+11, posts+23);
String dd = indate.split(" ")[1];
String key = dd+"-"+from+"-"+indate;
//String key = from+"-"+indate;
String intime = "-in-"+nextline.substring(posts+24, posts+35);
inout.put(key, intime);
}
else if (nextline.indexOf("of out")>0)
{
int posfrom = nextline.indexOf("from");
int posnextAt = nextline.indexOf("@", posfrom);
int posts = nextline.indexOf("timestamp");
from = nextline.substring(posfrom+5,posnextAt);
indate = nextline.substring(posts+11, posts+23);
String dd = indate.split(" ")[1];
String key = dd+"-"+from+"-"+indate;
String outtime = "-out-"+nextline.substring(posts+24, posts+35);
if (inout.containsKey(key))
{
String val = inout.get(key);
if (!(val.indexOf("out")>0))
inout.put(key, val+outtime);
}
else
inout.put(key, outtime);
}
}
}
catch(Exception e)
{
System.err.println(nextline);
System.err.println(e.getMessage());
}
nextline = in.readLine();
}
in.close();
for(String key: inout.keySet())
{
String val = inout.get(key);
out1.write(key+" , "+val+"\n");
System.out.println(key + val);
}
out1.close();
}
}
catch (IOException e)
{
throw new IllegalArgumentException(e);
}
}
}
描述:这些是员工的登录和注销时间,我正在从日志文件中读取这些,但有些正确地出现在单行中,如第 7 行和第 8 行,有些在同一日期出现在不同的行中,我想要它像我上面提供的示例一样打印在同一行中,并且在输入和输出时间都以单行形式出现的记录应该保持原样.... PLZ 任何人都可以帮助....!