Java - รบกวนสอบถาม และวิธีการ หากเราต้องการอ่านไฟล์และเปรียบเทียบข้อมูลแต่ละบรรทัดเหมือนกันหรือไม่
ลอง search ใน internet ดูครับ มีหลายวิธีเลยครับ
Date :
2014-06-30 20:10:08
By :
Chaidhanan
ตัวอย่าง code ประมาณนี้
เช็คว่าบรรทัดที่ 1 ซ้ำกับบรรทัดไหนบ้าง
ถ้าสงสัยถามเพิ่มได้คับ
Code (Java)
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
public class LineCompare {
public static void main(String[] args){
try{
File file = new File("c:/temp/myfile.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
ArrayList<String> allLineArray = new ArrayList<String>();
while ( (line=reader.readLine()) != null){
allLineArray.add(line);
}
reader.close();
String firstLine = allLineArray.get(0);
for (int i=1;i<allLineArray.size();i++){
String nextLine = allLineArray.get(i);
if (firstLine.equals(nextLine)){
System.out.println("Line#1 duplcate with line#"+i);
}
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
Date :
2014-06-30 20:43:29
By :
binary.prep
ข้อมูลของผมที่อยู่ในไฟล์ จะมีลักษณะแบบนี้ครับ หากสังเกตดูแล้ว แต่ละบรรทัดจะมีข้อมูลเหมือนกัน แต่จะสลับตำแหน่งกันครับ จะมีวิธีการอย่างไรในการตรวจสอบครับ
ip_src=2886758405 ip_dst=2886729729 ip_tos=0 ip_off=0 ip_ttl=32 icmp_type=8 icmp_code=0 icmp_id=8 ==> ip_flags=0
ip_src=2886758405 ip_dst=2886729729 ip_tos=0 ip_flags=0 ip_off=0 ip_ttl=32 icmp_type=8 icmp_id=8 ==> icmp_code=0
ip_src=2886758405 ip_dst=2886729729 ip_tos=0 ip_flags=0 ip_off=0 ip_ttl=32 icmp_code=0 icmp_id=8 ==> icmp_type=8
Date :
2014-07-01 14:23:49
By :
nattawat22
ขอรายละเอียดอีกหน่อยคับ
ต้องการหาว่าอะไรแตกต่างจากอะไร? เท่าที่ดูทุกบรรทัดต่างกันหมด
Date :
2014-07-01 22:01:36
By :
binary.prep
คือ ผมต้องการเปรียบเทียบแต่ละบรรทัดในไฟล์เดียวกัน ถ้าบรรทัดไหนมีข้อมูลต่างจากบรรทัดอื่นให้นำมาแสดงผล ครับ
บังเอิญว่าไปเจอ code นี้มาครับ แต่ไม่มี class main มาให้ ผมก็เลยงง ว่าจะสร้าง class main ยังงัยครับ
Code (Java)
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.Reader;
import java.util.List;
public class Diff
{
public static void readersAsText(Reader r1, String name1, Reader r2, String name2,
List diffs)
throws IOException
{
LineNumberReader reader1 = new LineNumberReader(r1);
LineNumberReader reader2 = new LineNumberReader(r2);
String line1 = reader1.readLine();
String line2 = reader2.readLine();
while (line1 != null && line2 != null)
{
if (!line1.equals(line2))
{
diffs.add("File \"" + name1 + "\" and file \"" +
name2 + "\" differ at line " + reader1.getLineNumber() +
":" + "\n" + line1 + "\n" + line2);
break;
}
line1 = reader1.readLine();
line2 = reader2.readLine();
}
if (line1 == null && line2 != null)
diffs.add("File \"" + name2 + "\" has extra lines at line " +
reader2.getLineNumber() + ":\n" + line2);
if (line1 != null && line2 == null)
diffs.add("File \"" + name1 + "\" has extra lines at line " +
reader1.getLineNumber() + ":\n" + line1);
}
}
Date :
2014-07-02 11:28:37
By :
nattawat22
ตัวอย่างของข้อมูลที่อยู่ในไฟล์ เช่น
a b c d e f
e f g h i j k
a b c d e f
b a d c e f
e f a c j h
h f a c e j
ผลลัพธ์ ที่ต้องการ เมื่อรันโปรแกรม
a b c d e f
e f g h i j k
e f a c j h
Date :
2014-07-02 11:44:41
By :
nattawat22
จากตัวอย่างโค้ดที่ให้มาถ้าเราต้องการจะเขียน main class เพื่อเรียก method readersAsText ของ class Diff
สามารถทำได้หลายแบบ ที่ผมทำคือผมตั้งชื่อ class ใหม่ชื่อ CallDiff
Code (Java)
import java.io.FileReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
public class CallDiff {
public static void main(String[] args){
try{
String fileName1 = "c:/temp/file1.txt";
String fileName2 = "c:/temp/file2.txt";
Reader reader1 = new FileReader(fileName1);
Reader reader2 = new FileReader(fileName1);
List<String> diffResult = new ArrayList<String>();
Diff.readersAsText(reader1, fileName1, reader2, fileName2, diffResult);
for (String result : diffResult){
System.out.println(result+"\n");
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
แต่ดูเหมือน class Diff ที่คุณ Avatar เจอในเน็ตจะใช้สำหรับ compare file 2 file
เลยไม่แน่ใจว่าจะตอบโจทย์ที่คุณ Avatar ตั้งไว้ตอนแรกหรือเปล่า
ส่วนตัวอย่าง ผลลัพธ์ ที่แนบมาให้ดู ผมงงอย่างแรง ถ้าโจทย์คือต้องการหาบรรทัดที่ diff
บรรทัดที่ 4 (b a d c e f) ก็ไม่ซ้ำกับใครเลย แต่ทำไมไม่อยู่ในผลลัพธ์ อะคับ?
Date :
2014-07-02 16:52:57
By :
binary.prep
ตัวอย่างของข้อมูลที่อยู่ในไฟล์ เช่น
a b c d e f
e f g h i j k
a b c d e f
b a d c e f
e f a c j h
h f a c e j
ผลลัพธ์ ที่ต้องการ เมื่อรันโปรแกรม
a b c d e f
e f g h i j k
e f a c j h
จากตัวอย่างข้อมูลที่อยู่ในไฟล์ และผลลัพธ์ที่ออกมา คือว่า เราจะเอาเฉพาะบรรทัดที่มีข้อมูลไม่ซ้ำกับบรรทัดอื่นมาแสดงผล ครับ
ตัวอย่างของ Code ครับ
public class CrunchifyUniqueArrayList {
private static ArrayList<String> listLine = new ArrayList<String>();
public static void main(String[] args) throws FileNotFoundException, IOException {
File file = new File("C:\\Users\\Hadoop\\Documents\\Data Apriori\\icmp_full3.txt");
FileReader fr = new FileReader(file);
LineNumberReader lnr = new LineNumberReader(fr);
String line = "";
while ((line = lnr.readLine()) != null) {
listLine.add(line);
}
for (int x = 0; x < listLine.size(); x++) {
System.out.println(listLine.get(x));
}
}
}
ผลลัพธ์เมื่อ Run ครับ
a b c d e f
e f g h i j k
a b c d e f
b a d c e f
e f a c j h
h f a c e j
ตอนนี้อ่านข้อมูลออกมาได้ทุกบรรทัดแล้วครับ แต่ยังไม่สามารถที่จะเปรียบเทียบข้อมูลแต่ละบรรทัดได้ ครับ
รบกวนด้วยนะครับ ขอบพระคุณครับ
Date :
2014-07-03 10:51:38
By :
nattawat22
สำหรับบรรทัดที่ 4 จะมีข้อมูลเหมือนกับบรรทัดที่ 1 ครับ ซึ่งถือว่าเป็นข้อมูลชุดเดียวกันครับ
Date :
2014-07-03 14:43:45
By :
nattawat22
ลองอันนี้ดูครับ ได้ไม่ได้ยังงัยแจ้งผลด้วยนะครับ
Code (Java)
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
public class LineCompare {
static ArrayList<String[]> allPattens = new ArrayList<String[]>();
public static void main(String[] args) {
try {
File file = new File("c:/windows/temp/ip_log.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
int lineNo = 0;
while ((line = reader.readLine()) != null) {
lineNo++;
String[] values = line.split(" ");
if (!isSame(values)) {
System.out.println("line#" + lineNo + "=>" + line);
allPattens.add(values);
}
}
reader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static boolean isSame(String[] values) {
boolean same = false;
if (allPattens == null || allPattens.size() <= 0) {
return false;
}
for (String[] patterns : allPattens) {
if (patterns.length != values.length) {
continue;
}
int sameCount = 0;
for (int i = 0; i < patterns.length; i++) {
for (int j = 0; j < values.length; j++) {
if (patterns[i].equals(values[j])) {
sameCount++;
}
}
}
if (sameCount == patterns.length) {
return true;
}
}
return same;
}
}
Date :
2014-07-04 00:55:02
By :
binary.prep
ขอขอบพระคุณเป็นอย่างสู.ครับ ที่ได้ช่วยเหลือและให้คำปรึกษาและได้ทำการโปรแกรมให้เป็นตัวอย่าง
ตอนนี้สามารถ รันโปรแกรมได้ แล้วครับ
ขอขอบพระคุณอีกครั้งครับ
Date :
2014-07-04 09:20:22
By :
nattawat22
Load balance : Server 02