Input/Output Bestimmte Zeile in Datei ändern.

Cyborg

Aktives Mitglied
Hallo zusammen,

ich komme gerade nicht drauf, wie ich genau eine bestimmte Zeile in einer Datei ändern kann.

Die Datei ist wie folgt aufgebaut:

Code:
Hier steht etwas 

INSERT INTO tabelle VALUES (1,2),
(5,5),
(10,10),
(20,20),

Hier steht noch was
Hier auch ...

Damit die SQL-Anweisung ohne Probleme funktioniert, muss anstelle des letzten "," ein ";"

Kann ich irgendwie die letzte Stelle des "," ermitteln ?
Mein Programm liest bereits jede Zeile ein.
 

tribalup

Bekanntes Mitglied
Kommt drauf an ob die Dateien immer gleich aufgebaut sind. Das wird wohl aber nicht der Fall sein, da du immer andere Queries setzt oder? Ansonsten Kommas zählen oder Kommentare in den Dateien setzen und dann mit nem Reader parsen und danach suchen.
 

Mujahiddin

Top Contributor
Die Frage ist natürlich, ob da nur Queries stehen.
Falls dein "Hier steht noch was" irgendwas vollkommen unvorhersehbares impliziert, kann das bisschen schwerer werden.
Falls es sich jedoch um SQL-Schlüsselwörter wie "SELECT", "UPDATE", "ALTER", "CREATE", "DROP", "INSERT" etc. handelt - also wirklich Sachen, die am Anfang einer Query stehen, dann könntest du mit Regex nach diesen suchen und das Komma davor [sofern das letzte Zeichen ein Komma ist] in einen Semikolon wandeln.

Ansonsten müsstest du das Ende einer Query "markieren" und da würde mir nichts einfallen, weil das bei verschiedenen Queries alle möglichen Formen annehmen kann.
 

Cyborg

Aktives Mitglied
ja, leider kann das Ende immer verschieden aussehen :(

ich hatte an sowas gedacht wie:
mit readLine geh ich über jede zeile und wenn ein ")," vorkommt, speicher ich mir die position ausgehend vom gesamten dokument.
wenn ich alle zeilen durch bin, müsste er zum schluss das letzte ")," gespeichert haben und dann müsste ich nur nochmal irgendwie an die stelle springen können und das "," gegen ";" austauschen :/
 
Zuletzt bearbeitet:

tribalup

Bekanntes Mitglied
Wenn beispielsweise nach dem Querie kein Komma mehr kommt dann ebend mit lastIndexOf(",").
Ansonsten wie bereits gesagt ist es nur einfach möglich, wenn du irgendein festes Muster in den Files hast.
 

tribalup

Bekanntes Mitglied
Brauchst du ja gar nicht. Mit substring kannst du dir nen neuen String zusammenbasteln. Nimmst beispielsweise den substring vom Anfang bis zu lastIndexOf()-1, hängst nen ";" ran und hängst dann noch den substring von lastIndexOf()+1 bis Ende hinten ran und schreibst das ganze wieder in deine Datei.
 

Cyborg

Aktives Mitglied
also entweder ich steh jetzt aufm schlauch oder du vergisst etwas :D

mit readLine lese ich jede Zeile einzeln aus.
Die Zeilen wissen somit untereinander nichts von.
Ich weiß nicht, wie du dir das dann mit dem lastIndexOf vorstellst.
 

tribalup

Bekanntes Mitglied
1.lastIndexOf suchen und in einer Variable xy speichern
2.Zeile einlesen und in einem String z speichern
3.Länge des Strings z von xy abziehen(wenn kleiner 0, dann ist das letzte Komma in dieser Zeile und du kannst die Position erneut mit lastindexof bestimmen und wie ich oben geschrieben habe ersetzen)
4.Zeile in Datei schreiben und wieder mit 1 beginnen
 

tribalup

Bekanntes Mitglied
Die einzige Stelle an der es nun noch hacken kann ist, dass du nicht weißt wie du lastindexof im gesamten File kriegst.
Bau dir dafür einen einzelnen String indem du alle Zeilen mit readline durchgehst und String.concat verwendest.

Beispiel

File:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaa,a

Nun gehst du durch mit while(String xx=readline!=null)
String zz.concat(xx)

Dann sieht String zz so aus:aaaaaaaaaaaaaaaaaaaaaaaaaaaa,a
Darauf lastindexof: ergibt 28(speichern in int yy)

Dann wieder mit readline durch
while(String xy=readline!=null)
yy-xy.length();
if(yy<0)
{
// das letze komma ist in dieser Zeile
// und kann in dieser Schleife ersetzt werden indem erneut lastindexof auf diese Zeile angewendet wird und das Zeichen in diesem lastindexof durch ";" ersetzt wird
}
//hier wird die jeweilige Zeile in die Datei geschrieben
 
Zuletzt bearbeitet:

Cyborg

Aktives Mitglied
Ja so ähnlich habe ich es jetzt auch gemacht.
Ich hatte doch noch ein "Muster" in allen Dateien.
Nämlich, dass die letzte Zeile mit ")," immer 12 Zeilen von der letzten Zeile entfernt ist.

Das ist zwar nicht unbedingt hübsch, aber damit wollte ich ja kein Preis gewinnen :)
 

Mujahiddin

Top Contributor
Wie ich das verstanden habe, willst du die Dateien zweimal lesen, einmal mit Zeilenumbrüchen und einmal ohne.
Ich würde folgende Methoden empfehlen:

Code:
byte[] Files.readAllBytes(Path, Charset);
(mit
Code:
String s = new String(byte[], Charset);
kann man dies in einen String wandeln
Code:
List<String> Files.readAllLines(Path, Charset);

Und die gleiche Datei zweimal zu lesen ist wahrscheinlich nicht gerade der beste Weg.
Falls die letzte Zeile mit ")," immer 12 Zeilen vor Schluss ist:

Java:
List<String> list = Files.readAllLines(myPath, Charset.forName( "ISO-8859-1" )); /* oder UTF-8 oder was auch immer */
list.set( list.size() - 12, list.get( list.size() - 12 ).replace( ")," , ");" ) );
Files.write(myPath, list, Charset.forName( "ISO-8859-1" ) /* oder was auch immer */ );
 
S

Spacerat

Gast
@TO: ...Da kann man nur sagen... lass dir was einfallen. :( Dazu solltest du dir mal den StreamTokenizer ansehen, der liest Streams Zahlen- bzw. Wortweise und zählt dabei die Zeilennummern. Ferner kann man einstellen, ob ein Zeilenende signifikant oder nicht ist. Bei SQL-Dumps sind sie es natürlich nicht. Da muss man nur die verschiedenen SQL-Anweisungen kennen, die immer am Anfang eines Querys stehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
KeVoZ_ Bestimmte Zeile aus Console finden & auslesen Allgemeine Java-Themen 2
JavaJakob22 Bestimmte HashMap importieren Allgemeine Java-Themen 4
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
C Aus MEHREREN Excel Tabellen bestimmte Zelle addieren Allgemeine Java-Themen 1
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
N Input/Output Website Text auslesen und bestimmte Zeilen wiedergeben Allgemeine Java-Themen 4
K Apache POI Word bestimmte Textstellen bearbeiten Allgemeine Java-Themen 1
H Bestimmte Aufgaben zur bestimmter Zeit/ in bestimmten Intervallen Allgemeine Java-Themen 3
X Schauen ob eine bestimmte .exe geöffnet ist Allgemeine Java-Themen 7
J Bestimmter Buchstabe = bestimmte Zahl Allgemeine Java-Themen 10
Minonos Einem Programm Zugriff auf bestimmte Ordner geben Allgemeine Java-Themen 5
A Bestimmte Sonderzeichen im Regulären Ausdruck Allgemeine Java-Themen 2
R Bestimmte Tasten abgreifen Allgemeine Java-Themen 3
aze JUnit: Testen ob bestimmte Exception nicht auftritt Allgemeine Java-Themen 18
H2SO3- bestimmte class immer mit 1.4 compilieren Allgemeine Java-Themen 5
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
D prüfen, ob Enums bestimmte Elemente enthalten Allgemeine Java-Themen 3
Iron Monkey RandomAccessFile - Bestimmte Filesize begrenzen Allgemeine Java-Themen 4
L Programm um eine bestimmte Uhrzeit ausführen Allgemeine Java-Themen 4
M Security Manager für bestimmte Klassen/Classloader? Allgemeine Java-Themen 3
E Wie Arraylisten auf bestimmte Art durchlaufen? Allgemeine Java-Themen 3
X Codeabarbeitung innerhalb des Hauptprogramms für bestimmte Zeit unterbrechen Allgemeine Java-Themen 2
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
S Java Excel bestimmte Zellen auslesen (POI HSSF) Allgemeine Java-Themen 11
S bestimmte Strings spliten! Allgemeine Java-Themen 7
G bestimmte Files suchen Allgemeine Java-Themen 2
A Bestimmte JVM verwenden Allgemeine Java-Themen 13
A bestimmte Zeichen aus einem String auslesen Allgemeine Java-Themen 2
L Wie für ein bestimmte JVM-Version kompilieren? Allgemeine Java-Themen 2
I Thread eine bestimmte Zeit zur Ausführung geben Allgemeine Java-Themen 2
P JSlider nur bestimmte werte geben Allgemeine Java-Themen 2
D Programmunterbrechung für eine bestimmte Zeit (Millisikunden Allgemeine Java-Themen 10
M JTextPane Mausklick auf bestimmte Wörter startet Aktion Allgemeine Java-Themen 8
T Bestimmte bytes in einer Datei ersetzen? Allgemeine Java-Themen 4
D Vektor - bestimmte Werte auslesen. Allgemeine Java-Themen 3
A bestimmte Taste an Server verschicken Allgemeine Java-Themen 11
G Einem Programm eine bestimmte Rechenzeit zuteilen Allgemeine Java-Themen 3
8 Programme für bestimmte Dateitypen finden Allgemeine Java-Themen 6
S Bestimmte Tasten mit der Robot Klasse? Allgemeine Java-Themen 4
G Bestimmte Dateien aus Verzeichnis löschen Allgemeine Java-Themen 5
G Nur bestimmte Variablen einer Klasse übernehmen Allgemeine Java-Themen 4
H JavaFX Warnung in package Zeile Allgemeine Java-Themen 2
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
M Checkstyle 100 Zeichen pro Zeile Allgemeine Java-Themen 11
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
Bluedaishi Zeile um zeichen erweitern Allgemeine Java-Themen 9
M String automatisch in nächste Zeile umbrechen (Graphics) Allgemeine Java-Themen 6
KeVoZ_ Nacheinander folgende Strings in Textdokument auf neue Zeile schreiben Allgemeine Java-Themen 6
D falsche Zeile aus JTable in MySQL gelöscht Allgemeine Java-Themen 6
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
F Fehler in Zeile in Log schreiben Allgemeine Java-Themen 6
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
F String nach Schlüsselwörtern durchsuchen und ganze Zeile ausgeben Allgemeine Java-Themen 4
C Speicherung fon Zeile und Spalte Allgemeine Java-Themen 2
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
Ananaskirsche Input/Output Zeile aus Datei einlesen Allgemeine Java-Themen 10
F JTextArea Cursor in die nächste Zeile setzen Allgemeine Java-Themen 2
M Startdatei konnte nicht geparst werden. Fehler in Zeile 0 Allgemeine Java-Themen 5
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
S Die Zeile die JUnit gerade ausführt lesen Allgemeine Java-Themen 15
X Scanner hört nach der 25. Zeile auf Allgemeine Java-Themen 6
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
1 InputStream liest die letzte Zeile nicht ein Allgemeine Java-Themen 2
S String aus Datei-Zeile auslesen Allgemeine Java-Themen 6
C Zeile aus einer CSV-Datei löschen Allgemeine Java-Themen 3
FoolMoon Datei zeilenweise einlesen, aber nicht die erste Zeile! Allgemeine Java-Themen 3
neonfly Anzahl Zeichen pro Zeile auf der Konsole Allgemeine Java-Themen 8
H RandomAccessFile - Zeile finden Allgemeine Java-Themen 5
S readLine() liest nur jede 2. Zeile Allgemeine Java-Themen 3
J Mit POI Zeile in Excel löschen Allgemeine Java-Themen 5
P readLine() liest nur jede dritte Zeile? Allgemeine Java-Themen 3
G Zeile einfügen in TreeTable Allgemeine Java-Themen 2
M .txt Datei öffnen und jede Zeile mit festem String verketten Allgemeine Java-Themen 5
O Zeile eines Textfiles löschen Allgemeine Java-Themen 2
B in file immer 2. zeile überschreiben Allgemeine Java-Themen 8
J Text einer .csv Datei einlesen und Zeile in NEUE Zeile hänge Allgemeine Java-Themen 1
B Logs - txt-Datei neue Zeile anfuegen, neue Datei erstellen Allgemeine Java-Themen 6
S Zweidimensionales Array neue Zeile erzeugen Allgemeine Java-Themen 3
P Neue Zeile Plattformunabhängig Allgemeine Java-Themen 3
I Zeile überprüfen Allgemeine Java-Themen 12
P JTable selektierte Zeile mitwandern Allgemeine Java-Themen 2
Saxony Letzte Zeile eines Streames mit auslesen Allgemeine Java-Themen 4
H Notepad - Mitgabeparameter um in eine Zeile zu springen Allgemeine Java-Themen 15
M Funktion liest nach Textaus aus der vorigen Zeile Allgemeine Java-Themen 2
TheJavaKid Zeile auf existenz von String prüfen. Allgemeine Java-Themen 19
R Einzelne Zeile manipulieren Allgemeine Java-Themen 4
M Datei und Zeile im Code Allgemeine Java-Themen 2
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
W gezielt eine Zeile einlesen? Allgemeine Java-Themen 6
byte Erste Zeile einer Textdatei entfernen Allgemeine Java-Themen 5
L JTable: Wenn Zeile markiert dann Meldung. geht nicht Allgemeine Java-Themen 4
V Class Document seltsam leere Zeile am Anfang Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben