Hallo, ich hänge seit Tagen an einer Stelle fest und vielleicht hat einer von euch den umbau Tip für meinen code.
Was macht das Program?
Es liest eine CSV Datei "person.dat" ein und speichert die Werte einer Zeile in einen Objekt "person" in eine Linkedlist namens "Personen", welche aus serialisierten Objekten (pnr, pname, kst) besteht. Das funktioniert auch soweit.
Jetzt soll es in einer 2. Linkedlist ein Indexpaar aufbauen, welches den offset wert vom 0.byte (spalte 1 zeile 1) speichert und die pnr der ersten Zeile - und hier kommt der Knackpunkt - ich schaffe es nicht den Offset Zeiger richtig einzubauen so das es wie gewünscht funktioniert -> Siehe Soll/IST Ausgabe am ende des Posts.
Dateiname: "person.dat"
IST-Ausgabe
Soll-Ausgabe
Hier noch infos zu meinen System:
BS: OS X 10.6.6
IDE: Jedit + shell
Wenn ich den folgendes Stück code vor die "for-schleife" schiebe wird die ISAM-LinkedList nicht richtig aufgebaut...
Habe auch schon versucht durch andere Schleifen das passend hinzubekommen, aber ich komm irgendwie nicht drauf
Hier noch der API Link zur RAF
EDIT 1: War noch n copy & paste fehler drin, jetzt lässt dich code auch wieder kompilieren ;-)
EDIT 2: Anbei jetzt noch inhalt für eine Testdatei
EDIT 3: Den Java Code in den richtigen BBcode gepackt. Ist mir bei Tagedieb`s posting erst aufgefallen das ich da was falsch formatiere bzw. nicht farbig war.
Was macht das Program?
Es liest eine CSV Datei "person.dat" ein und speichert die Werte einer Zeile in einen Objekt "person" in eine Linkedlist namens "Personen", welche aus serialisierten Objekten (pnr, pname, kst) besteht. Das funktioniert auch soweit.
Jetzt soll es in einer 2. Linkedlist ein Indexpaar aufbauen, welches den offset wert vom 0.byte (spalte 1 zeile 1) speichert und die pnr der ersten Zeile - und hier kommt der Knackpunkt - ich schaffe es nicht den Offset Zeiger richtig einzubauen so das es wie gewünscht funktioniert -> Siehe Soll/IST Ausgabe am ende des Posts.
Java:
import java.io.*;
import java.util.*;
import java.lang.Object;
public class Isam_v4
{
public static class Person implements Serializable
{
int pnr;
String pname;
int kst;
}
public static class Di implements Serializable
{
int pnr;
long offset;
}
public static void einlesen()
{
List <Person> Personen = new LinkedList<Person>();
List <Di> Isam = new LinkedList<Di>();
System.out.println("");
System.out.println("CSV Datei person.dat wird eingelesen...");
System.out.println("");
try
{
RandomAccessFile file;
file = new RandomAccessFile("person.dat","r");
for(String line; (line = file.readLine()) != null;)
{
String[] tmp = line.split(";"); // CSV Werte person.dat trennen ";"
Di idxin = new Di();
idxin.offset = file.getFilePointer(); // DAS IST MEIN SORGENKIND
idxin.pnr = Integer.parseInt(tmp[0]);
Isam.add(idxin);
Person eingabe = new Person();
eingabe.pnr = Integer.parseInt(tmp[0]);
eingabe.pname = tmp[1];
eingabe.kst = Integer.parseInt(tmp[2]);
/*
System.out.println("Personal Nr.. "+eingabe.pnr);
System.out.println("Name......... "+eingabe.pname);
System.out.println("Kostenstelle.."+eingabe.kst);
System.out.println(); */
Personen.add(eingabe);
}
file.close();
System.out.println("");
System.out.println("CSV Datei eingelesen, "+Personen.size()+" Eintraege gefunden" );
System.out.println("");
System.out.println("Pnr ; Name ; Kostenstelle");
System.out.println("-------------------------");
for (int i = 0; i < Personen.size(); i++)
{
Person csvaus = new Person();
csvaus = Personen.get(i);
System.out.println(csvaus.pnr+";"+csvaus.pname+";"+csvaus.kst);
}
System.out.println("");
System.out.println(+Personen.size()+" Datensaetze ausgegeben");
System.out.println("");
System.out.println("");
System.out.println("Offset ; Pnr ");
System.out.println("-------------------------");
for (int i = 0; i < Isam.size(); i++)
{
Di idxout = new Di();
idxout = Isam.get(i);
System.out.println(idxout.offset+";"+idxout.pnr);
}
System.out.println("");
System.out.println(+Isam.size()+" Datensaetze ausgegeben");
System.out.println("");
}
catch(FileNotFoundException e)
{
System.out.println("Es ist ein FileNotFoundFehler aufgetreten: "+e.getMessage());
}
catch(IOException f)
{
System.out.println("Es ist ein IOExpeptionFehler aufgetreten: "+f.getMessage());
}
}
public static void main(String[] args) throws IOException,FileNotFoundException
{
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
einlesen();
}
}
Code:
1;Max;2
2;Moritz;4
3;mry;5
4;mrx;12
Code:
Offset ; Pnr
-------------------------
12;1
21;2
30;3
41;4
Soll-Ausgabe
Code:
Offset ; Pnr
-------------------------
0;1
12;2
21;3
30;4
Hier noch infos zu meinen System:
BS: OS X 10.6.6
IDE: Jedit + shell
Code:
javac 1.6.0_22
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04-307-10M3261)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03-307, mixed mode)
Wenn ich den folgendes Stück code vor die "for-schleife" schiebe wird die ISAM-LinkedList nicht richtig aufgebaut...
Java:
Di idxin = new Di();
idxin.offset = file.getFilePointer();
Habe auch schon versucht durch andere Schleifen das passend hinzubekommen, aber ich komm irgendwie nicht drauf
Hier noch der API Link zur RAF
EDIT 1: War noch n copy & paste fehler drin, jetzt lässt dich code auch wieder kompilieren ;-)
EDIT 2: Anbei jetzt noch inhalt für eine Testdatei
EDIT 3: Den Java Code in den richtigen BBcode gepackt. Ist mir bei Tagedieb`s posting erst aufgefallen das ich da was falsch formatiere bzw. nicht farbig war.
Zuletzt bearbeitet: