ユーザー名と日付が同じである行 1 と行 5 を取りたいのですが、行 1 には時間が含まれており、行 5 には時間が含まれています。これらの 2 行を読み取り、比較して、両方の行に同じユーザー名があるかどうかを確認します。および日付。そうであれば、他のテキストファイルまたはハッシュマップに1行として出力します
このような例:"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 行目のように 1 行で適切に表示されるものもあれば、同じ日付の別の行で表示されるものもあります。上記の例のように同じ行に印刷し、出入り時間の両方で単一行に記録されるレコードはそのまま保持する必要があります.... PLZは誰でも助けることができます....!