Wie analysieren Sie einen text-Datei, und erstellen Sie einen Datenbank-Datensatz von es
Ich versuche im Grunde eine einfache Test-Generator. Ich möchte eine Schaltfläche, um eine Textdatei zu analysieren und fügen Sie die Datensätze in meine Datenbank. Die Fragen und Antworten sind in einer text-Datei. Ich habe die Suche im Netz nach Beispielen, aber ich kann nicht finden, eine, die passt zu meiner situation.
Die text-Datei header-Informationen, die ich will, Sie zu ignorieren, bis Sie die Zeile, die mit "~ Ende des Auszugs". Ich will "~ Ende des Auszugs", um anzugeben, der Anfang der Fragen. Ein paar Zeilen nach, die nach einer Zeile suchen, die mit einem "(" an der siebten Stelle. Ich will, dass, um anzuzeigen, die Frage, die Anzahl Linie. Die Frage Nummer line ist einzigartig, dass die "(" die siebte Stelle. Ich will, dass als Indikator markiert den Beginn einer neuen Frage. In der Frage Nummer Zeile, die ersten drei Zeichen zusammen "T1A" die Frage der Gruppe. Der Letzte Teil des T1A*01* ist die Nummer der Frage innerhalb dieser Gruppe.
So, wie Sie sehen können, werde ich auch brauchen, um die tatsächliche Frage, die text Zeile und die Antwort-Linien als auch. Auch in der Regel nach den vier Antwort-Linien ist die Frage, Terminator, angezeigt durch "~~". Ich weiß nicht, wie ich wäre in der Lage, dies zu tun für alle Fragen, die in der text-Datei. Muss ich halten das hinzufügen zu einem array-String? Wie würde ich den Zugriff auf diese Informationen aus der Datei und fügen Sie Sie in einer Datenbank. Dies ist sehr verwirrend für mich und die Art, wie ich fühle, ich könnte lernen, wie dies funktioniert, ist, indem Sie sehen, ein Beispiel, das deckt meine situation. Hier ist ein link zu der text-Datei, die ich spreche:http://pastebin.com/3U3uwLHN
Code:
public static void main(String args[]) {
String endOfSyllabus = "~ End of Syllabus";
Path objPath = Paths.get("2014HamTechnician.txt");
String[] restOfTextFile = null;
if (Files.exists(objPath)){
File objFile = objPath.toFile();
try(BufferedReader in = new BufferedReader(
new FileReader(objFile))){
String line = in.readLine();
List<String> linesFile = new LinkedList<>();
while(line != null){
linesFile.add(line);
line = in.readLine();
}
System.out.println(linesFile);
}
catch(IOException e){
System.out.println(e);
}
}
else{
System.out.println(
objPath.toAbsolutePath() + " doesn't exist");
}
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new A19015_Form().setVisible(true);
}
});
}
- Sind Sie vertraut mit
JDBC
? - Art. Ich weiß genug, um wahrscheinlich zu machen, eine Datenbank. Das eigentliche problem ist, die Daten aus der text-Datei. Das ist, wo ich bin ratlos.
- Ich schlage vor, Sie gestalten Ihre Tabelle(N) erste. Dann entscheiden Sie, was Java Collection ist besser für diesen Zweck geeignet. Dann Programmieren Sie Ihre gesamte Logik und dann beginnen zu füllen die blanks. Es könnte klug sein, um definieren Ihre grundlegenden QA (Frage und Antworten) Klasse ArrayList von QS-Objekten.
- Ich würde den download von MySQL lernen Sie, wie Sie es verwenden, erfahren Sie, wie Sie eine Tabelle erstellen und einfügen von Datensätzen erfahren Sie, wie laden Sie eine tabulatorgetrennte Datei. Danach schreiben Sie Ihren parser. Java ist OK, aber Perl ist richtig gut für diesen Zweck.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen einer Textdatei in Java ist geradlinig (und es gibt sicher andere, kreative und effiziente Möglichkeiten, dies zu tun):
Skipping eine beliebige Menge von Linien erreicht werden kann, wie diese:
Ihre wahre problem ist der text nach split auf. Hatte Sie schon mit CSV, die Sie nutzen könnten
String[] nextLine = readLine.split("\t");
split jede Zeile in Ihre jeweiligen Zellen auf der Basis der tab-Trennung. Aber Ihr nicht, so werden Sie stecken mit dem Lesen jeder Zeile, und als etwas split auf.Wie es scheint, Sie haben die Kontrolle über die text-Datei-format. Wenn Sie sind, gehen Sie zu einem leichter zu konsumieren-format, z.B. CSV, sonst wirst du entwerfen Sie eine benutzerdefinierte parser für das format.
Einen bonus auf die Verwendung von CSV ist, kann es Spiegel ein Datenbank sehr effectivly. I. e. Ihre CSV-header Spalte = Spalte in der Datenbank.
Soweit Datenbanken gehen Sie, unter Verwendung von JDBC ist es einfach genug, so stellen Sie sicher, dass Sie verwenden vorbereitete Anweisungen zum einfügen Ihrer Daten zu verhindern, die gegen SQL-injection:
--Edit--
Sehe nicht deine pastebin früher auf. Es scheint nicht, dass Sie sind verantwortlich für die Datei-format, so dass Sie gehen zu müssen, aufgeteilt auf die Räume ( jedes Wort ) und verlassen Sie sich auf reguläre Ausdrücke, um zu ermitteln, ob dies eine Frage oder nicht. Glücklicherweise scheint es, die Datei ist Recht einheitlich, so dass Sie sollten in der Lage sein, dies zu tun, ohne zu viel problem.
--Edit 2--
Als eine mögliche Lösung können Sie versuchen, diese ungetestete code:
if(readLine.startsWith("~~ End of Syllabus")){
um die Letzte Zeile in Ihrem header. wenn Ihr zählen die Linien entlang des Weges können Sie nun verwenden Sie diese als trigger zum start Ihrer regulären Ausdruck prüfen. Aufteilen, Zeilen, die Sie gehen zu wollen, es zu tun auf einem FeldreadLine.split(" ");
zu vergleichen und dann den ersten string in dem array zu sehen, wenn Sie mit Ihrer Frage-format regular expressionwhile(line != null){ if(line.startsWith("~~ End of Syllabus")){ split1 = line.split(" "); splitHolder = split1[0]; } linesFile.add(line); line = in.readLine(); } System.out.println(splitHolder);