Text im String bearbeiten

Diskutiere Text im String bearbeiten im Programmierung Forum im Bereich Programmierung; Hallo alle miteinander. Ich bin immernoch an meinem ersten Tool und fange langsam an zu verzweifeln da nichts was ich ausprobiere funktioniert...
#1
M

Marcel S

Dabei seit
16.11.2009
Beiträge
6
Alter
31
Hallo alle miteinander.

Ich bin immernoch an meinem ersten Tool und fange langsam an zu verzweifeln da nichts was ich ausprobiere funktioniert. Schreiben tu ich das Programm in VB bzw. mit der Version VB Express 2008

Also ich muss aus diesem Code:

1. Den Sprueh-Befehl mit samt Leerzeile löschen:
Sprueh 4, 0, 0, 6;

2. Die Zeile darunter den letzten Wert auf 150 ändern (das ist die Höhe)
Axyz xxx, xxx, 150;

3. Darunter eine neue Zeile einfügen mit dem Inhalt:
Absaugung 1, 0;

4. Am Programmende den letzten Höhenwert auf 150 ändern und das anhängen:
Axyz xxx, xxx, 150;
Absaugung 0, 0;
Axyz 1, -0643.640, 2072.071, 153.203, 0, 0;
Tuer;
Einaus 0, 9011, 0, 7, 0, 1;


5. Nach der Werkzeugdefinition (Wdef) muss dieser Code folgen:
Einaus 0, 9011, 1, 7, 0, 1;

Das schwierige daran ist das es überall einsetzbar sein muss weil der Text nicht immer gleich ist.

Über Tipps oder sogar Codeabschnitte wäre ich sehr dankbar. Weis einer vll. noch gute Bücher für VB da ich bis jetzt nur das Einsteigerbuch von GalileoComputing gelesenhabe.
 
Zuletzt bearbeitet:
#2
DiableNoir

DiableNoir

Dabei seit
18.01.2004
Beiträge
6.069
Also ich finde es ist für einen Anfänger ein etwas hoch gestecktes Ziel. Besser wäre es wenn du dich erstmal mit der Sprache selbst, dem Konzept der Objektorientierung und dem .NET-Framework vertraut machen würdest. ;)

Also, wenn du nicht weißt was eine Klasse kann, dann solltest du dir erstmal die Doku ansehen um zu lernen was zB die String-Klasse so an Methoden zu Manipulation besitzt:
http://msdn.microsoft.com/en-us/library/system.string_members.aspx

Was dein Problem angeht, würde ich eher die Grammatik der Sprache des Scripts lernen und einen Parser schreiben...aber du kannst es ja auch zB so machen:

1. Den Sprueh-Befehl mit samt Leerzeile löschen:
If (meinString.StartsWith("Sprueh")) Then
meinString = meinSting.Substring(6).Trim

Substring(6) gibt den String ab der Position 6 zurück. Trim() wird danach gleich drauf ausgeführt und sorgt dafür dass vorne und hinten angehängte Leerzeichen entfernt werden.

2. Die Zeile darunter den letzten Wert auf 150 ändern (das ist die Höhe)
Schau dir doch mal den String an: Axyz xxx, xxx, 150;
Hier erkennt man schnell, dass man die 3 Werte erst vom Befehl Axyz trennen und dann anhand der Beistriche in ein Array zerlegen kann. Da du aber nur den letzten Wert ändern willst, kannst du das ignorieren.

Der Aufruf von meinWerteArray = meinString.Split(",") würde dir den String anhand der Beistriche zerlegen und ein Array mit diesen Werten liefern:
meinWerteArray(0) = Axyz xxx
meinWerteArray(1) = xxx
meinWerteArray(2) = xxx;

Den letzten Wert im Array brauchst du also nur mit "150;" überschreiben und dann den String wieder mit meinString = String.Join(",", meinWerteArray) zusammenfügen.

3. Darunter eine neue Zeile einfügen mit dem Inhalt:
meinString = meinString + Enviroment.NewLine + "Absaugung 1, 0;" ergibt einen String mit den zwei gewünschten Zeilen.

4. Am Programmende den letzten Höhenwert auf 150 ändern und das anhängen:
Das Selbe wie oben.

5. Nach der Werkzeugdefinition (Wdef) muss dieser Code folgen:
Auch hier einfach prüfen ob die Zeile mit "Werkzeug" beginnt und dann einfach wie oben eine weitere Zeile anhängen.


Sooo...alles kaue ich dir aber jetzt nicht durch. Glaube aber, das sollte mehr als ausreichend sein um das jetzt umzusetzen. ;)
 
#3
M

Marcel S

Dabei seit
16.11.2009
Beiträge
6
Alter
31
Ich hatte mir das schon angeguckt mit dem Trimmen habe aber nicht gedacht das ich das so verwenden kann. Ich hatte das über Suchen und dann Löschen versucht war aber bissel umständlich mit der angabe der Länge und der Zeile bzw. Zeichen.

Dein vorschläge setzen aber voraus das ich den Text Zeile für Zeile auslese oder? Du hattest mir ja schon beim OpenFileDialog geholfen nur bei dem Code wenn ich da mit arbeiten wollte kam immer ein Fehler weil er immer r.close() bzw. w.close() asl Fehler angab. Konnte auch nichts mit der Meldung ansich anfangen.
 
#4
DiableNoir

DiableNoir

Dabei seit
18.01.2004
Beiträge
6.069
@Marcel S:
Also alle Methoden der String-Klasse sind in der MSDN recht gut mit Beispielen beschrieben. ;)

Schon alleine die Struktur der Datei macht das zeilenweise Auslesen zu einer besonders geeigneten Verfahrensweise. (Ich gehen natürlich davon aus, dass diese Scriptsprache so geschaffen ist, dass immer ein Befehl pro Zeile steht. Ich kenne ja dessen Grammatik nicht.)

Wie bereits mehrfach erwähnt, rate ich die Datei mit einem StreamReader zu öffnen, zu verarbeiten und im Speicher/einer temporären Datei zwischenzuspeichern. Die Datei kannst du dann mit einem StreamWriter auf die Originaldatei zurückschreiben.

Das oben von dir genannte OpenFileDialog-Beispiel sollte ja nur verdeutlichen wie man hier vorgehen kann, da deine vorherige Vorgehensweise nicht so optimal war. Außerdem war es ja auch als Grundentwurf für ein direktes Lesen/Schreiben in der Originaldatei gedacht. Das ist aber vielleicht in diesem Fall nicht optimal und man muss bei sowas auch immer einiges beachten. Da du außerdem Zeilen einfügen willst, rate ich eher davon ab. Trenne Einlesen & Verarbeitung von dem Zurückschreiben sauber, dann hast du auch keine Probleme. ;)
 
#5
M

Marcel S

Dabei seit
16.11.2009
Beiträge
6
Alter
31
Ich habe das Programm soweit schon fertig und es klappt auch mit den Testprogrammen die ich bekommen habe. Ist zwar vll. nicht die eleganteste Lösung aber es funktioniert.

Code:
    Private Sub btnmcrbearbeiten_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnmcrbearbeiten.Click
        Dim ofd As New OpenFileDialog
        ofd.InitialDirectory = "C:\"
        ofd.Filter = "Fräsdatei (*.mcr)|*.mcr| " _
                    & "Texte (*.txt)|*.txt"
        ofd.Title = "Öffnen"
        If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
            Dim fs As New FileStream(ofd.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read)
            Dim sr As New StreamReader(fs)
            Dim sw As New StreamWriter(fs)
            Dim zeile As String

            Do Until sr.Peek() = -1 'Zeile für Zeile auslesen
                zeile = sr.ReadLine()
                If (zeile.StartsWith("Wdef")) Then 'Hängt nach Wdef eine neue Zeile an
                    zeile = zeile + vbCrLf + "Einaus 0, 9011, 1, 7, 0, 1;" 'mit dem Inhalt
                End If
                If (zeile.StartsWith("Sprueh 4, 0, 0, 6;")) Then 'Suche nach Sprue und wenn gefunden dann...
                    zeile = zeile.Substring(18).Trim 'sprue entfernen
                    zeile = sr.ReadLine() 'neue zeile auslesen (die davor war nicht gespeichert)
                    Dim zerlegt As Array 'die zeile in einzelteile zerlegen
                    zerlegt = zeile.Split(",")
                    zerlegt(3) = "150" 'den Wert von 15 auf 150 ändern
                    zeile = String.Join(",", zerlegt) + vbCrLf + "Absaugung 1, 0;" 'zusammensetzen des ganzen und neue Zeile mit Absaugung
                End If
                fraescode &= zeile & vbCrLf 'Inhalt des Strings Zeile an den Code weitergeben
                filename = ofd.FileName
            Loop
            sr.Close()
            Dim ende As String
            ende = ";!Programmende!" & vbCrLf & "Absaugung 0, 0;" & vbCrLf & "Axyz 1,-0643.640,2072.071,153.203,0,0;" & vbCrLf & "Tuer;" & vbCrLf & "Einaus 0, 9011, 0, 7, 0, 1;"
            fraescode = fraescode + ende 'einfügen vom Programmende
            MsgBox("Bearbeitung der MCR abgeschlossen", MsgBoxStyle.Information, "Fertig")
        Else
            MsgBox("Abbruch")
        End If
    End Sub
Vll. fällt euch ja noch was auf was geändert werden sollte/müsste.
Danke für die tolle Hilfe

Mfg Marcel S.
 
#6
DiableNoir

DiableNoir

Dabei seit
18.01.2004
Beiträge
6.069
Also, nimms mir nicht böse, aber ich werde mich lieber davor hüten dazu ein Kommentar abzugeben, sonst nehme ich dir noch den ganzen Mut die Sprache richtig zu lernen. Ich bin bei sowas nicht gerade für Nachsicht bekannt. :D
 
Thema:

Text im String bearbeiten

Text im String bearbeiten - Ähnliche Themen

  • Windows 10 (1809) erhält neue Einstellung zum Vergrößern von Texten - so funktioniert es

    Windows 10 (1809) erhält neue Einstellung zum Vergrößern von Texten - so funktioniert es: In sein aktuelles Windows 10 Oktober Update hat Microsoft eine weitere Möglichkeit implementiert, die Lesbarkeit von Texten zu verbessern, was...
  • Windows 10: Sprachausgabe für Texte aktivieren oder deaktivieren - so geht's

    Windows 10: Sprachausgabe für Texte aktivieren oder deaktivieren - so geht's: Wie schon in den Vorgänger-Betriebssystemen hat Microsoft auch in Windows 10 eine Sprachausgabe integriert, welche in der Lage ist, auf dem...
  • In Taskleiste kann im Feld "Zur Suche Text hier eingeben" kein Text eingegeben werden.

    In Taskleiste kann im Feld "Zur Suche Text hier eingeben" kein Text eingegeben werden.: Nach dem 1. Tastendruck ist keine weitere Eingabe möglich. Das Feld verschwindet und taucht nach einer Weile wieder auf. Wer kennt eine Lösung?
  • Apple iPhone: alle Texte und App-Symbole größer anzeigen - so geht es

    Apple iPhone: alle Texte und App-Symbole größer anzeigen - so geht es: Wer Probleme bei der Texterkennung hat, weil Schriften und Icons zu klein dargestellt werden, hat zwei Möglichkeiten: eine Brille oder eine...
  • Surface Pro 4: Kann Text mit Stift nicht unterstreichen

    Surface Pro 4: Kann Text mit Stift nicht unterstreichen: Hallo, ich habe folgendes Problem mit meinem Stift seit heute, undzwar wenn ich versuche einen Text zu markieren geht das nicht mehr. Eigentlich...
  • Ähnliche Themen

    Oben