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

Threadstarter
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

Threadstarter
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

Threadstarter
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

  • Siehe Text

    Siehe Text: Anscheinend haben wir keine Berechtigung zum Abrufen der E-Mail für "*** Die E-Mail-Adresse wurde aus Datenschutzgründen entfernt. ***"...
  • E-Mail Antworten/Allen Antworten/Weiterleiten: Urpspünglicher Text ist nicht enthalten

    E-Mail Antworten/Allen Antworten/Weiterleiten: Urpspünglicher Text ist nicht enthalten: Hallo, ich habe das Problem, dass bei einer Antwort (an alle) bzw. Weiterleitung einer Mail der ursprüngliche Text nicht mehr enthalten ist...
  • Balabolka nutzen um Texte in vielen verschiedenen Formaten unter Windows vorlesen zu lassen

    Balabolka nutzen um Texte in vielen verschiedenen Formaten unter Windows vorlesen zu lassen: Gründe für die Nutzung einer TTS Anwendung (Text-To-Speech) kann es viele geben sei es, weil man darauf angewiesen ist oder, weil man sich zum...
  • Texte in einem Word Dokument nur in Großbuchstaben oder Kleinbuchstaben darstellen lassen

    Texte in einem Word Dokument nur in Großbuchstaben oder Kleinbuchstaben darstellen lassen: Es kann immer wieder einen Grund geben, dass man einen Text in einem Word Dokument nur in kleinen oder großen Buchstaben benötigt, und alles neu...
  • WORDPAD-Text gelöscht

    WORDPAD-Text gelöscht: Wiederherstellen gelöschter Dateien aus WordPad : angefangene Texte wurden vor dem Abschalten auf "Energie sparen" über Nacht nicht gespeichert...
  • Ähnliche Themen

    Oben