Autor Beitrag
Sebbi2712
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 06.07.09 10:37 
Hallo Leute.
Ich habe folgendes Problem in C#:
Eine externe Datei (@"C:\Datei1.txt") möchte ich zeilenweise einlesen und ggf. Änderungen vornehmen.
Jede Zeile mit einem bestimmten Anfangsstring soll also geändert werden.

Hier ein Beispiel:
Original Datei 1:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;===========================================================
; POSITIONS
;===========================================================

;PosA,B:
DECL GLOBAL E6POS PosA={X 4,Y 5,Z 6,S 'B0010',T 'B00101011',E1 0.0,E2 0.0,E3 0.0}
DECL GLOBAL E6POS PosB={X 0,Y 0,Z 0,S 'B0010',T 'B00101011',E1 0.0,E2 0.0,E3 0.0}
DECL GLOBAL BASE={X 4,Y 5,Z 6,S 'B0010',T 'B00101011',E1 0.0,E2 0.0,E3 0.0}
;End PosA,B
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Abgeänderte Datei 2:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;===========================================================
; POSITIONS
;===========================================================

;PosA,B:
DECL GLOBAL E6POS PosA={X 14,Y 25,Z 36,S 'B0010',T 'B00101011',E1 10.0,E2 10.0,E3 10.0}
DECL GLOBAL E6POS PosB={X 10,Y 20,Z 30,S 'B0010',T 'B00101011',E1 10.0,E2 10.0,E3 10.0}
DECL GLOBAL BASE={X 4,Y 5,Z 6,S 'B0010',T 'B00101011',E1 0.0,E2 0.0,E3 0.0}
;End PosA,B
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Wie Ihr seht, sind nur die Daten, die in der Zeilen nach "DECL GLOBAL E6POS" geändert worden. Die Werte für X, Y, Z, E1, E2 und E3 sollen einer Double Variablen zugewiesen werden, sodass man sie anschließend weiter verarbeiten können (In diesem Beispiel wird X mit 10 addiert, Y mit 20, Z mit 30, E1 E2 E3 werden mit 10 addiert)
Die Werte für S und T sollen nicht geändert werden!
Prinzipiell ist es egal ob die Originaldatei ersetzt wird, oder ob eine neue Datei angelegt wird!

Hat jemand von euch dazu einen vernünftigen Lösungsvorschlag?
Ich kenne mich mit dem Verarbeiten von Stringketten leider nicht ganz schlecht aus.

Wenn mein Problem nicht exakt beschrieben wurde, bitte einfach nachfragen!

Besten Dank schon im Voraus!

Gruss
Sebastian
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 06.07.09 10:48 
Ich werfe einmal File.ReadAllLines und File.WriteAllLines in den Raum. ;-)

Das Array kannst du dazwischen dann wie ein normales Array zeilenweise durchgehen und ggf. ändern.

Sollte die Datei sehr groß sein, könnte es sinnvoll sein eine andere Lösung zu wählen, wenn die nicht komplett in den Speicher geladen werden soll / kann.
Sebbi2712 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 06.07.09 11:14 
Wie kann man sagen, dass eine Zeile eine Arraykette ist und ein Leerzeichen " " ein Komma "," oder eine Geschweifte Klammer "{" eine neue Einheit des Arrays ist.

Beispiel:
DECL GLOBAL E6POS PosA={X 4,Y 5,Z 6,S 'B0010',T 'B00101011',E1 0.0,E2 0.0,E3 0.0}

Nun soll das Array wie folgt aussehen:
Array [0] = DECL
Array [1] = GLOBAL
Array [2] = E6POS
Array [3] = PosA=
Array [4] = X
Array [5] = 4
Array [6] = Y
Array [7] = 5
Array [8] = Z
Array [9] = 6
Array [10] = S
Array [11] = 'B0010'
.....usw.
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Mo 06.07.09 11:25 
Strings haben eine Split-Funktion.

Und noch ein Tipp:
Das sind absolute Grundlagen.
Ich empfehle dir ein Buch/eBook zu C# zu lesen oder die MSDN zu befragen.