tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
276
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Maddili Maddili ist offline Mitglied Silber
    Registriert seit
    Feb 2010
    Beiträge
    65
    Hi, ich hab ein kleines Problem, bei dem ich nicht weiterkomme.

    Ich habe eine Textdatei, mit einem Head in folgender Form:

    ;==============================================================================

    ; Program Number: aa
    ; Customer: aa
    ; Date: 17.05.2010 09:41:40
    ; Engineer: aa
    ; Description: aa
    ;
    ; Options:
    ;
    ; REVISIONS:
    ;
    ;==============================================================================
    Mein Programm liest die Zeilen aus und übergibt sie der Gui in verschiedene Textfelder.

    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:


    ;==============================================================================

    ; 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
    ;
    ;==============================================================================
    Zusätzlich möchte ich abfragen, ob bereits eine Revisionszeile vorhanden ist (die rote Zeile) -> Wenn ja: nächste Zeile einfügen (blau)


    Problem ausreichend beschrieben? wenn nicht, bitte fragen.

    vielen Dank,
    Maddin
     

  2. #2
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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ß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  3. #3
    Maddili Maddili ist offline Mitglied Silber
    Registriert seit
    Feb 2010
    Beiträge
    65
    Danke für die Antwort.

    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.
    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.

    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
     

  4. #4
    Avatar von schnuffie
    schnuffie schnuffie ist offline Mitglied Platin
    Registriert seit
    Oct 2004
    Ort
    Ober-Roden (Hessen)
    Beiträge
    725
    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:
    HTML-Code:
    Ich habe Durst
    Danach:
    HTML-Code:
    Ich habe viel Durst
    So kannst Du das für Dein Beispiel bestimmt umsetzen.
     
    CU schnuffie

    Fragliche Fragen stellende Fragensteller sind für verantwortungslose Antworten antwortender verantwortlicher Antworter selbst verantwortlich.

  5. #5
    Maddili Maddili ist offline Mitglied Silber
    Registriert seit
    Feb 2010
    Beiträge
    65
    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!!
     

  6. #6
    Avatar von schnuffie
    schnuffie schnuffie ist offline Mitglied Platin
    Registriert seit
    Oct 2004
    Ort
    Ober-Roden (Hessen)
    Beiträge
    725
    Code :
    1
    2
    3
    
    // ganzen Inhalt lesen, dann:
    String s = new String(bb.arry());
    int pos = s.indexOf("irgendwas"); // variable Position
     
    CU schnuffie

    Fragliche Fragen stellende Fragensteller sind für verantwortungslose Antworten antwortender verantwortlicher Antworter selbst verantwortlich.

  7. #7
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    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.

  8. #8
    Maddili Maddili ist offline Mitglied Silber
    Registriert seit
    Feb 2010
    Beiträge
    65
    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
     

  9. #9
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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ß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 25.08.10, 19:13
  2. Justify-Hack gesucht: Letzte Zeile auch "justify'en"
    Von DJLopez im Forum HTML & XHTML
    Antworten: 4
    Letzter Beitrag: 06.08.09, 13:19
  3. Eingabe in der timeline: "time*100" - bei Effekt "turbulentes Versetzen"-"Evolution"
    Von MTMonline im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 2
    Letzter Beitrag: 25.04.08, 09:49
  4. Antworten: 2
    Letzter Beitrag: 03.01.06, 14:54
  5. Finder methods + JBoss + Was expecting one of: "CONCAT" "SUBSTRING" ... "(" ... <STRI
    Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 27.05.05, 15:29