ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
276
276
EMPFEHLEN
-
Hi, ich hab ein kleines Problem, bei dem ich nicht weiterkomme.
Ich habe eine Textdatei, mit einem Head in folgender Form:
Mein Programm liest die Zeilen aus und übergibt sie der Gui in verschiedene Textfelder.;==============================================================================
; Program Number: aa
; Customer: aa
; Date: 17.05.2010 09:41:40
; Engineer: aa
; Description: aa
;
; Options:
;
; REVISIONS:
;
;==============================================================================
jetzt mein Problem:
Wenn ich etwas ändere (z.b. das Datum), wird die jeweilige Zeie überschrieben. ABER es soll jetzt noch eine Zeile für die Revision geschrieben werden (rote Zeile). Wie kann ich denn Zeile so einfügen, dass es ungefähr SO aussieht:
Zusätzlich möchte ich abfragen, ob bereits eine Revisionszeile vorhanden ist (die rote Zeile) -> Wenn ja: nächste Zeile einfügen (blau);==============================================================================
; Program Number: aa
; Customer: aa
; Date: 17.05.2010 09:41:40
; Engineer: aa
; Description: aa
;
; Options:
;
; REVISIONS:
;____: - Dies ist die erste Infozeile
;____: - Evtl kommt noch eine weitere hinzu, wenn das nächste mal etwas geändert wird
;
;==============================================================================
Problem ausreichend beschrieben? wenn nicht, bitte fragen.
vielen Dank,
Maddin
-
Hallo,
ich weiß nicht wie dein Programm aussieht, aber zwischenschieben kannst du da nichts. Wenn du was zusätzliches einfügen möchtest, musst du alles in die Datei schreiben bis zu Änderung, dann die Änderung und dann den Rest.
Wenn das ganze sowieso in einem Textfeld steht, hast du ja sowieso das ganze als String und kannst direkt den kompletten String schreiben.
Um so eine Zeile wieder zu finden, bleibt dir nichts anderes übrig, als die Datei zeilenweise auszulesen und zu überprüfen, ob sie so anfängt wie deine rote Zeile.
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Danke für die Antwort.
Das ist ebenfalls ein kleines Problem, denn ich weiß ja nicht, was in der roten Zeile steht. Hab mir das so gedacht, dass ich mit 'if(line.startswith(";_____: "){} ' umgehe.Um so eine Zeile wieder zu finden, bleibt dir nichts anderes übrig, als die Datei zeilenweise auszulesen und zu überprüfen, ob sie so anfängt wie deine rote Zeile.
Hier mal ein Teil meines Codes:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
FileReader input = new FileReader("standardsop.sop"); FileWriter output = new FileWriter(Aktionen.soppfad + Aktionen.sopname + filewritername); BufferedReader reader = new BufferedReader(input); BufferedWriter writer = new BufferedWriter(output); String line = reader.readLine(); String ProgNr = "; Program Number: "; String Customer = "; Customer: "; String Date = "; Date: "; String Engineer = "; Engineer: "; String Description = "; Description: "; String Options = "; Option: "; String Revision = "; REVISIONS:"; String Revision2 = "; : "; int zaehler = 0; while (line!=null) { zaehler++; /* * Hier entsteht der Head */ if (line.equals(ProgNr)) { ProgNr=ProgNr.replaceFirst("; Program Number: ","; Program Number: " + Output.tf_PrgNr.getText()); writer.write("; Program Number: "+Output.tf_PrgNr.getText()); }else if (line.equals(Customer)) { Customer=Customer.replaceFirst("; Customer: ","; Customer: " + Output.tf_Customer.getText()); writer.write("; Customer: "+Output.tf_Customer.getText()); }else if (line.equals(Date)) { Date=Date.replaceFirst("; Date: ","; Date: " + Output.tf_Date.getText()); writer.write("; Date: "+Output.tf_Date.getText()); }else if (line.equals(Engineer)) { Engineer=Engineer.replaceFirst("; Engineer: ","; Engineer: " + Output.tf_Engineer.getText()); writer.write("; Engineer: "+Output.tf_Engineer.getText()); }else if (line.equals(Description)) { Description=Description.replaceFirst("; Description: ","; Description: " + Output.tf_Description.getText()); writer.write("; Description: "+Output.tf_Description.getText()); }else if (line.equals(Options)) { Options=Options.replaceFirst("; Options: ","; Options: " + Output.tf_Options.getText()); writer.write("; Options: "+Output.tf_Options.getText()); }else if (line.equals(Revision)) { [COLOR="Blue"] // Ab HIER wirds interessant[/COLOR] writer.write("; REVISIONS:"); writer.newLine(); line=reader.readLine(); System.out.println("line: " + line); if(line.equals(";")){ if(Output.tf_Revision.getText().equalsIgnoreCase("")){ System.out.println("leer"); }else{ writer.write(line); writer.newLine(); writer.write("; : "+Output.tf_Revision.getText()); writer.newLine(); writer.write(";"); System.out.println("test"); } } }else{ writer.write(line); } writer.newLine(); line = reader.readLine();
Bei dem Code, wie ich ihn jetzt gepostet habe, wird die "Revisionszeile" allerdings überschriben.
Vielleicht sehe ich gerade auch den Wald vor lauter Bäumen nicht, aber ich sitzt schon ewig an dem Problem
mfg
Maddin
-
17.05.10 13:07 #4
Wenn ich sowas machen will, arbeite ich immer mit Channels:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
public static void main(String[] args) throws IOException { File f = createNewFile("Ich habe Durst"); addText(f, 9, "viel "); } private static File createNewFile(String text) throws IOException { File f = File.createTempFile(FilePartWriter.class.getSimpleName(), ".txt"); PrintStream out = null; try { out = new PrintStream(new FileOutputStream(f)); out.print(text); out.flush(); return f; } finally { out.close(); } } private static void addText(File file, int pos, String text) throws IOException { FileChannel fc = null; try { fc = (new RandomAccessFile(file, "rw")).getChannel(); ByteBuffer bb = ByteBuffer.allocate((int) file.length()); int len = fc.read(bb, pos); fc.position(pos); fc.write(ByteBuffer.wrap(text.getBytes())); fc.write(ByteBuffer.wrap(bb.array(), 0, len)); } finally { fc.close(); } }
Zuerst steht in der Datei:
Danach:HTML-Code:Ich habe Durst
So kannst Du das für Dein Beispiel bestimmt umsetzen.HTML-Code:Ich habe viel Durst
CU schnuffie
Fragliche Fragen stellende Fragensteller sind für verantwortungslose Antworten antwortender verantwortlicher Antworter selbst verantwortlich.
-
Danke Schnuffie für deine Mühe.
Aber leider verstehe ich keine Zeile deines Codes
Naja, ganz so schlimm ists nicht..
Nur wenn ich das so mache, wie du (also an der Stelle 9 den String xyz einfügen), dann kann ich gleich nen zaehler++ mitlaufen lassen und an zeile 20 String xyz einfügen. Aber so schööön ist das nicht, denke ich. Was ist wenn sich in der Zukunft der Head verschiebt, oder Überschrift plötzlich drei statt zwei Zeile ist (usw).
Ich bin mittlerweile am Verzweifeln. Hat denn keiner noch ne Idee? Sonst breche ich jetzt sofort dieses Projekt, mein Studium und mein Werkstudentenjob ab!!
-
17.05.10 14:30 #6Code :
1 2 3
// ganzen Inhalt lesen, dann: String s = new String(bb.arry()); int pos = s.indexOf("irgendwas"); // variable PositionCU schnuffie
Fragliche Fragen stellende Fragensteller sind für verantwortungslose Antworten antwortender verantwortlicher Antworter selbst verantwortlich.
-
Speichere die Revisions-Zeilen in einer ArrayList o.ä., weil du ja nicht weißt, wie viele du bekommst.
Führe eine Variable mode ein, in der du speicherst, z.B. als enum, ob du einen Customer, ein Date oder sonstwas einzulesen bzw. eingelesen hast. Anhand des Modus kannst du dann in einem case die Daten extrahieren und in die richtige Variable schreiben.Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
-
Guten Morgen zusammen.
Sorry ich muss dieses Thema nochmal pushen, da ich einfach nicht weiterkomme.
Es muss doch möglich sein:
- Eine Zeile abzufragen, ob sie "leer" ist (also lediglich ein ' ; ' enthält, sonst aber leer ist)
- Wenn ja, schreibe die Revisionszeile;
- Wenn nein (es besteht bereits eine oder mehrere Revisionszeilen), gehe eine Zeile weiter runter und frage erneut (ob zeile leer ist usw..)
mfg Maddin
-
Hallo,
wenn du die Zeile als String hast, kannst du es einfach überprüfen.
Code :1 2 3 4
String line = einlesenDerZeile; if(line.trim().equals(";")){ } else{}
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
Ähnliche Themen
-
Richtige Syntax bei Operatorüberladung, wann sind "friend", "const", "&" nötig?
Von mrs_schokokeks im Forum C/C++Antworten: 4Letzter Beitrag: 25.08.10, 19:13 -
Justify-Hack gesucht: Letzte Zeile auch "justify'en"
Von DJLopez im Forum HTML & XHTMLAntworten: 4Letzter Beitrag: 06.08.09, 13:19 -
Eingabe in der timeline: "time*100" - bei Effekt "turbulentes Versetzen"-"Evolution"
Von MTMonline im Forum Videoschnitt, Videotechnik & -produktionAntworten: 2Letzter Beitrag: 25.04.08, 09:49 -
JTextArea mach beim Speichern am ende einer Zeile ein "\r"
Von munuel im Forum JavaAntworten: 2Letzter Beitrag: 03.01.06, 14:54 -
Finder methods + JBoss + Was expecting one of: "CONCAT" "SUBSTRING" ... "(" ... <STRI
Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 6Letzter Beitrag: 27.05.05, 15:29





Zitieren

Login





