Dateiarbeit

Status
Nicht offen für weitere Antworten.

chico

Neues Mitglied
Hallöchen,

habe ein kleines Problem mit dem schreiben in eine Datei. Ich habe ein Indexdatei(*.txt) in der Städtenamen und noch zwei andere Werte eingetragen werden sollen. Im Prinzip funktioniert es ja, nur die Anordnung in der Zeile stimmt nicht ganz. Wie kann ich denn genau sagen das für den Stadtnamen und ensprechend für die anderen Werte ein festgelegter Abstand vordefiniert ist. Bsp:

Dresden 4 6

Für die Stadt soll ein Bereich von 0-35, für den zweiten Wert der Bereich 35-40 und für den dritten Wert der Bereich 40-45 festgelegt werden. Wenn ich in Java einen String aus einer Datei auslese, kann ich ihn mit der Methode substring(int1,int2) einteilen. Nur wie kann ich es so in eine Datei eintragen, damit ich dann beim auslesen auf einen von den drei Werten zugreifen kann?

MfG
chico
 

bubu

Mitglied
Du könntest die einzelnen Informationen mit einem eigenen Trennzeichen versehen, z.B. "Dresden##info1##info2", solltest dir aber sicher sein, dass das Trennzeichen nie in den Informationen vorkommt.

Dann kannst du das ganze entweder mit (dem veralteten) StringTokenizer oder mit der (aktuellen) split()-Methode trennen.
 

NTB

Bekanntes Mitglied
Eigentlich ist Deine Variante besser, als ein eigenes Trennzeichen zu verwenden, denn wenn Du eine feste Länge hast, brauchst Du Dich nicht darum zu kümmern, ob in den Werten Dein Trennzeichen vorkommt.

Ich weiß grad nicht genau, ob das eventuell mit String.format geht, oder ob es eventuell etwas vorgefertigtes gibt, aber Du könntest es zu Fuß machen:
Code:
if (dresden.length < 35)  {
    add (35-dresden.length) leerzeichen to dresden
}
if (dresden.length > 35)  {
    truncate dresden auf dresden.length == 35
}

Das bringt aber das Problem, dass ein Dörfchen mit einem verdammt langen Namen nicht in Dein Feld passt.
Noch eleganter Wäre also, wenn Du vor jeden Wert die Länge des Wertes mit abspeicherst :) Dann weißt Du hinterher auch, wieviel Zeichen eingelesen werden müssen und brauchst Dich weder um die Länge, noch um Trennzeichen kümmern:

Code:
writeToFile(dresden.length)
writeToFile(dresden)
writeToFile(großoberammeruntergau.length)
writeToFile(großoberammeruntergau

dann steht in Deiner Datei:
7dresden
22groß oberammeruntergau
 

kleiner_held

Top Contributor
Folgende Möglichkeiten:

1. Einen String auf die Länge von 35 Zeichen mit Leerzeichen auffüllen:
Code:
StringBuilder builder = new StringBuilder(35);
builder.append("dresden");
while (builder.length() < 35)
{
    builder.append(' ');
}
builder.setLength(35); // nachträglich auf 35 Zeichen beschränken, falls der Orginalstring zu lang war

2. Die Variante von bubu ist am einfachsten. Wenn Du einen String und zwei Zahlen hast, schreibst du den String ans Ende. Dann gibts auch keine Probleme, wenn das Trennzeichen im String vorkommt, da man in genau 3 Teile splittet.
z.B.: 4#6#dresden

3. String mit Längenangabe
Bei sowas muss Längenangabe und Stringinhalt durch ein fest definiertes Trennzeichen separiert werden, ansonsten gibts Unklarkheiten bei Strings, die mit Ziffern anfangen. Bedeutet 81dresden dann 8 chars "1dresden" oder 81 chars beginnend mit "dresden ?

4. Für komplexe Strings, die eventuell sogar Zeilenumbrüche enthalten, oder wenn die Datei auch in Excel geöffnet werden soll, empfiehlt sich das CSV Dateiformat.
Fertige Java Bilblitheken gibts z.B.: hier.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Problem Dateiarbeit: split und trim Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben