String-Operation am offenen Herzen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

maro1969
*
Beiträge: 11
Registriert: Mo, 27.02.2012 20:13

String-Operation am offenen Herzen

Beitrag von maro1969 »

Hallo zusammen,

nachdem ich hier schon viel aktive und passive Hilfe erfahren habe, habe ich mein Projekt mit der Stückliste etwas weiter geführt.

Mittlerweile erzeugt Calc mittels Makro auch die rudimentären CNC-Programme, besser gesagt die Woodwop-Dateien (Programmier-Software der CNC-Fräse). Calc erzeugt lediglich die Dateien mit den korrekten Werkstückmaßen und speichert diese am richtigen Ort mit dem richtigen Namen und öffnet sie in Woodwop zur weiteren Bearbeitung.

Die weiteren Bearbeitungen werden nun händisch in Woodwop über die GUI eingefügt.
Hierbei passieren auch mal Fehler. Nach einem ganz besonderen möchte ich gerne abschließend von einem Makro in allen .mpr-Dateien (Woodwop) suchen:

Code: Alles auswählen

.
.
.
.
<139 \Komponente\
IN="format/dia.mpr"
XA="0.0"
YA="0.0"
ZA="0.0"
EM="0"			REM	<--  EM="0" ist richtig!! Alles andere als 0 ist fatal!!
VA="Z_Mass -2"
VA="Vorschub 25  "
VA="tool 132"
VA="l l"
VA="b b"
VA="d d"
VA="a 0"
VA="gl 0"
KAT="Komponentenmakro"
MNM="Komponentenmakro"
??="_nonmirror"
.
.
.
.
Der Textschnipsel ist ein Ausschnit aus einer .mpr-Datei und stellt eine bestimmte Bearbeitung dar. Es wird ein Umterprogramm "dia.mpr" aufgerufen, und zwar mit der nachfolgend aufgeführten Variablen.
Die Variable "EM" MUSS gleich 0 sein. Hier schleicht sich aber gerne mal ein anderer Betrag ein, was fatal sein kann und schnell übersehen wird. Sorgt immer wieder für Frust an der Maschine.

Kann ich jetzt mit einem Basic-Makro eine solche .mpr-Datei nach diesem Textschnipsel durchsuchen und darin wiederum den Wert von "EM" prüfen?

Vielen Dank schon mal!!

Gruß
Martin
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: String-Operation am offenen Herzen

Beitrag von Toxitom »

Hei Martin,

ja, geht.... aber ob Du Dir das wirklich antuen willst......

Die Datei selbst auszuwerten und direkt zu ändern wirst Du mit Basic nicht so ohne weiteres hinbekommen - und mit der UNO-API Methoden direkt auch nicht.

Der Weg ist: Datei entweder zeilenweise einlesen und auswerten (sicher der beste Weg) oder als "Datenstrom" komplett einlesen.

Wenn Du also Basic nutzt:
Datei öffnen zum Lesen -> Zeilen weise einlesen, Zeile als String auswerten und schauen, ob die Zeile begint mit "EM=" - dann Wert vergleichen.

Bis jetzt hast Du also lediglich die Tatsache, dass etwas geändert werden muss.

Um nun die geänderte Werte wieder in eine Datei zurück zuschreiben, müsstest Du alle Zeilen einzeln wieder in eine neue Datei schreiben, dann die "alte" löschen und die neue umbenennen. Ich weiss nicht, wie viel Zeilen die Datei beinhaltet - wenn das aber einige tausend sind, so ist das natürlich nicht wirklich perform.

Du kannst auch den kompletten Dateiinhalt in einen String einlesen (Achtung! Max Größe der Stringvariabblen beachten) - dann dort die Suche starten und ersetzen - und dann komplett zurückschreiben. Ist bei kleineren Dateien wahrscheinlich performer.

Eventuell solltest Du über andere Scriptsprachen nachdenken (Python, Perl) - die mit regulären Ausdrücken solche Aufgaben m.A. deutlch schneller lösen können.

Viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
maro1969
*
Beiträge: 11
Registriert: Mo, 27.02.2012 20:13

Re: String-Operation am offenen Herzen

Beitrag von maro1969 »

Hallo Tom,

das ist mir zu viel Aktion.

Andere Scriptsprachen sind momentan bei mir gar kein Thema.

Ich hab jetzt das Format-Makro mit in das Makro gebacken, das die .mpr-Dateien erzeugt. Wird also immer fehlerfrei miterzeugt.


Danke trotzdem.

Gruß
Martin
Antworten