java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 07.05.2008, 12:58   #1 (permalink)
Stammbenutzer
Kilobyte
 
Registriert seit: 07.05.2008
Fachbeiträge: 110
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Bestimmte Zeile aus einer .txt-Datei auslesen?

Hallo,

vielleicht könnt ihr mir weiterhelfen. Ich habe folgendes Problem/Wunsch:

1.)
Ich möchte aus einer .txt-Datei nur genau eine Zeile auslesen. Dafür möchte ich vorher aber nicht die ganze Datei in meinen Speicher geladen haben! - Geht das??? (bei .bin-Dateien geht ja sowas - auch wenn es sich dann nicht um Zeilen, sondern um die entsprechende Bit-Stelle handelt)

2.)
Wenn ich eine .txt-Datei Zeilenweise bis zur gewünschten Zeile einlese, was passiert mit den vorher eingelesenen Zeilen?
Bleiben die im Arbeitsspeicher? Bsp. ich möchte nur die 10Zeile auslesen. Was passiert dann mit den Zeilen 1-9, die zuvor ausgelesen worden sind?


Danke.

Gruß
Till
till123 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.05.2008, 13:00   #2 (permalink)
Premium-Benutzer
 
Benutzerbild von The_S
 
Registriert seit: 29.11.2004
Fachbeiträge: 11.589
Blog-Einträge: 1
Abgegebene Danke: 62
Erhielt 154 Danke für 133 Beiträge
1.) RandomAccessFile oder einfach die vorhergehenden nicht speichern (siehe 2.))
2.) Solang du die Zeilen nirgends speicherst, verschwinden sie in den unendlichen Weiten des GC .
The_S ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.05.2008, 13:07   #3 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 07.05.2008
Fachbeiträge: 110
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
@Hobbit_Im_Blutrausch:

zu 1:
Bist du dir da ganz sicher, dass er zuvor nicht die ganze Datei einliest?

Aufruf wäre dann z.B. (ohne dass ich mir jetzt die Syntax angeschaut habe):
RandomAccessFile(test.txt,12)...
Und ich bekomme dann nur nie zwölfte Zeile zurückgegeben?

Danke
till123 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.05.2008, 13:15   #4 (permalink)
Premium-Benutzer
 
Benutzerbild von The_S
 
Registriert seit: 29.11.2004
Fachbeiträge: 11.589
Blog-Einträge: 1
Abgegebene Danke: 62
Erhielt 154 Danke für 133 Beiträge
kA, hab noch nie mit RandomAccessFile gearbeitet (ist eh schwachsinnig, Dateien sind nunmal sequentiell), aber die API sollte darüber doch aufklären!?


[edit] sollte das wohl erklären:


Zitat: API
A random access file behaves like a large array of bytes stored in the file system. There is a kind of cursor, or index into the implied array, called the file pointer; input operations read bytes starting at the file pointer and advance the file pointer past the bytes read.
Den Konstruktor gibt es nicht RandomAccessFile(String int) - außerdem liest du entweder byte- oder typ-weise (read(), readInt(), readUTF(), ...). Zeilenweise kannst du damit nicht so einfach lesen.
The_S ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.05.2008, 13:26   #5 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 07.05.2008
Fachbeiträge: 110
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
... dann bleibt mir anscheinend nichts anderes übrig als:

1.) .txt-Datei zeilenweise einlesen (bis zur gewünschten Zeile) - nicht gerade die beste Performance!
2.) selber ein Konstruktor schreiben, der mir direkt die gewünschte Zeile ausgibt - mehr Arbeit, Frage der Performance!
3.) meine Daten in einer .bin-Datei speichern - Problem der variablen Adressierung!


Danke für die Hilfe
till123 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.05.2008, 13:31   #6 (permalink)
Premium-Benutzer
 
Benutzerbild von The_S
 
Registriert seit: 29.11.2004
Fachbeiträge: 11.589
Blog-Einträge: 1
Abgegebene Danke: 62
Erhielt 154 Danke für 133 Beiträge
1.) Wie gesagt: Dateien sind sequentiell (und haben außerdem keine Zeilen )! Und außerdem, woher sollte denn irgendetwas wissen, wie viele "Zeilenumbruch-Zeichen" vorkommen, wenn er nicht jedes einzelne Zeichen angeguckt hat? Das ist also kein Performance-Problem, sondern einfach nicht anders möglich. Du schaust ja auch net einfach auf die Autobahn und sagst "Da fahren 20 rote Autos", sondern du musst dir jedes einzelne Auto anschauen und beurteilen ob es rot ist oder nicht. Anders schauts natürlich aus, wenn du genau weißt, wie lang eine Zeile ist ...

2.) Seit wann geben den Konstruktoren Daten aus? Was haben höchstens 20 Zeilen Code mit Arbeit zu tun? Und was hat das hier schon wieder mit der Performance zu tun?

3.) ???
The_S ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.05.2008, 13:39   #7 (permalink)
Benutzer
int
 
Registriert seit: 16.04.2008
Fachbeiträge: 40
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Zitat: till123
... dann bleibt mir anscheinend nichts anderes übrig als:

1.) .txt-Datei zeilenweise einlesen (bis zur gewünschten Zeile) - nicht gerade die beste Performance!
2.) selber ein Konstruktor schreiben, der mir direkt die gewünschte Zeile ausgibt - mehr Arbeit, Frage der Performance!
3.) meine Daten in einer .bin-Datei speichern - Problem der variablen Adressierung!


Danke für die Hilfe
Hallo Till,

Du möchtest Dich mit ziemlicher Sicherheit ganz demnächst mit Datenbanken vertraut machen.

Grüße,
Wolfram
Wolfram ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.05.2008, 13:40   #8 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 07.05.2008
Fachbeiträge: 110
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
zu 1 und 3:

Bei .bin-Dateien kann man direkt die gewünschten Bytes adressieren! Muss also nicht die ganze Datei in den Speicher laden. Hier muss man aber, wenn man ein Programm schreiben möchte, schon vorher festlegen, was in welcher Länge gespeichert werden darf. Sonst kann man (logischer Weise) die Adresse nicht genau bestimmen und aufrufen (s. SQL, hier gibt man ja auch vorher an, wie lang z.B. ein String sein darf)!

Wenn man nun aber dynamische Daten/Informationen, wie z.B. in der Fuzzy-Theorie speichern möchte, so ist die Länge nicht immer bekannt bzw. ist es nicht immer sinnvoll eine Länge vorzugeben, da so relativ schlampig mit dem Speicher umgegangen wird.

Sorry, Konstruktor war das falsche Wort! Und soviel Arbeit ist das nicht. Wollte halt nur wissen, ob es schon was vorgefertigtes gibt.


ende und out

thx
till123 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.05.2008, 13:44   #9 (permalink)
Premium-Benutzer
 
Benutzerbild von The_S
 
Registriert seit: 29.11.2004
Fachbeiträge: 11.589
Blog-Einträge: 1
Abgegebene Danke: 62
Erhielt 154 Danke für 133 Beiträge
.bin-Dateien sind (genauso wie alle anderen Dateien) nur ne Aufeinanderfolge von bits und bytes. Die Dateiendung sagt rein garnichts über den Inhalt einer Datei aus.
The_S ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.05.2008, 13:58   #10 (permalink)
Benutzer
int
 
Registriert seit: 16.04.2008
Fachbeiträge: 40
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Zitat: till123
zu 1 und 3:

Bei .bin-Dateien kann man direkt die gewünschten Bytes adressieren! Muss also nicht die ganze Datei in den Speicher laden. Hier muss man aber, wenn man ein Programm schreiben möchte, schon vorher festlegen, was in welcher Länge gespeichert werden darf. Sonst kann man (logischer Weise) die Adresse nicht genau bestimmen und aufrufen (s. SQL, hier gibt man ja auch vorher an, wie lang z.B. ein String sein darf)!

Wenn man nun aber dynamische Daten/Informationen, wie z.B. in der Fuzzy-Theorie speichern möchte, so ist die Länge nicht immer bekannt bzw. ist es nicht immer sinnvoll eine Länge vorzugeben, da so relativ schlampig mit dem Speicher umgegangen wird.

Sorry, Konstruktor war das falsche Wort! Und soviel Arbeit ist das nicht. Wollte halt nur wissen, ob es schon was vorgefertigtes gibt.


ende und out

thx
Hi,

dazu benutzt man dann einen "Index", wo drin steht, wo die Records anfangen. An Stelle 9 des Index steht dann z.B. 437, und so weiß man, wenn man den 9. Record haben will, muss man an Stelle 437 anfangen zu lesen. Der Index muss natürlich beim Schreiben und sonstigem Verändern gepflegt werden.

Jede Datenbank hat so was als Grundlage, da Datenbanken ja alle das Problem haben, Records in Dateien speichern zu müssen, und natürlich gibt es sowas längst. Daher mein Hinweis, dass Du Datenbanken benutzen möchtest. In SQL sind z.B. die Felddatentypen text/ntext/memo und blob variabel lang, wenn Du ganz, ganz sicher bist, dass die einzelnen Felder variabel lang sein müssen, kannst Du die benutzen.

Ansonsten musst Du halt das Rad neu erfinden und ISAM nachprogrammieren ... viel Spaß damit

Grüße,
Wolfram
Wolfram ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.05.2008, 14:41   #11 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 07.05.2008
Fachbeiträge: 110
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Danke für die Info.
Leider kann ich auf einer "normalen Datenbank" (z.B. relational) nicht aufbauen! Wir wollen/müssen eine Fuzzy-Datenbank entwerfen. Und da helfen die herkömmlichen Datenbanken nicht wirklich weiter
Wir greifen auch schon auf Indizes zurück. (Also die Funktionsweise von Indizes ist klar )

Also ein erneutes Danke an Alle.

Thema kann an dieser Stelle geschlossen werden
till123 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Wie eine bestimmte Zeile einer Txt-Datei lesen ? blstarter Java Basics - Anfänger-Themen 5 03.09.2007 13:41
Bestimmte Bereiche einer Datei auslesen Java Basics - Anfänger-Themen 5 28.01.2007 11:12
Text in bestimmte Zeile einer Datei schreiben KartoffelKiffer Allgemeine Java-Themen 1 28.11.2006 09:07
Ausgabe in bestimmte Zeile einer html Datei Bluescreen2001 Java Basics - Anfänger-Themen 12 01.06.2005 16:10
Nur die erste Zeile einer Datei auslesen H2SO4 Java Basics - Anfänger-Themen 3 24.11.2004 20:31


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de