Ein paar Worte vorabHome   Letzte MeldungenNews   Index der Kapitel und der besprochenen FunktionenIndex   Wer ich bin, warum ich diese Seiten mache, KontaktImpressum   Ich freue mich über jeden Eintrag im Gästebuch!Gästebuch   Einige Links zu anderen AutoLisp-SeitenLinks   Copyrights und DisclaimerRechts
Hier können die kompletten Seiten als ZIP-File heruntergeladen werden!

Berechnen von arithmetischen Ausdrücken in der Kommandozeile Sitz!Platz!Fass!
Das Verschachteln von Ausdrücken Alte Schachtel!
Das Speichern von Werten in Variablen Gebunkert
Verhindern der Evaluation mit Quote Bergbäche
Erzeugen von einfachen Listen in AutoLisp Brot,Eier,Käse
Einfache Funktionen zur Listenbearbeitung ...um die Wurst
Funktionen für den Zugriff auf Listenelemente Was ein Salat!
Über Haupt- und Nebeneffekte von Funktionen Schwer schuften
Das Definieren von eigenen Funktionen in AutoLisp Ostfriesischer...
Lokale Variablen und Funktionsargumente in AutoLisp Kondome!
Das Laden von Programmdateien in AutoLisp Banküberfall
Verzweigung in Funktionen aufgrund von Entscheidungen Wenn das Wort...
Zusammenfassen von Entscheidungen mit den Logik-Funktionen Ins Schweinderl
Mehrfach-Verzweigungen in AutoLisp mit Cond 3. Strasse links
Schleifen zum Steuern des Ablaufs in AutoLisp-Funktionen Wie im Fernsehen
Testfunktionen zum Steuern von Schleifen in AutoLisp Schwanger?
Gleichheitstests als Schleifenkriterium in AutoLisp Noch gleicher?
Zeichneketten-Bearbeitung in AutoLisp Rauchzeichen
Funktionen zur Konvertierung von Datentypen in AutoLisp Wasser zu Wein
Komplexere Funktionen für die Bearbeitung von Listen in AutoLisp Nicht arbeiten...
Das Erzeugen von anonymen Funktionen mit lambda Schwarze Kutte
Das Bearbeiten von Listenelementen mit foreach Jedem das Seine
Erzeugen und Verwenden von Assoziationslisten in AutoLisp Beim Psychiater
Zugriff auf Geometriedaten und Erzeugen von Geometrieelementen Ententanz
Der Umgang mit Auswahlsätzen in AutoLisp Jung gefreit, ...
Auswahl von AutoCAD-Zeichnungsgeometrie mit ssget Raffgierig!
Verändern von Zeichnungs-Geometrie mit entmod Flickschusterei
Das Erzeugen von Geometrie mit entmake Houdini
Über Programmierstile in AutoLisp, Teil 1 Emma
Über Programmierstile in AutoLisp, Teil 2 Sti(e)lblüten
Über Programmierstile in AutoLisp, Teil 3 Eingewickelt
Über Programmierstile in AutoLisp, Teil 4 Doofe Frisur?


Zum den Seiten für Fortgeschrittene

Zu den ActiveX-Seiten

Meine Private HP mit Fotos, Gedichten, Musik und Postkartenversand

Mein Online-Lexikon der Fotografie

Mein völlig abgedrehtes Reisebüro










Obwohl uns AutoLISP nur magere 4 Funktionen zur Bearbeitung von Zeichenketten (auch Strings genannt) zur Verfügung stellt, sollten wir uns keine grauen Haare wachsen lassen, da diese Funktionen ein ausreichendes Grundwerkzeug zur Verfügung stellen, um sich weitere Funktionen daraus abzuleiten, mit denen dann ein wirklich rationelles Arbeiten möglich ist.

Wir müssen Zeichenketten z.B dann bearbeiten, wenn es sich um Benutzereingaben handelt, die analysiert werden sollen, wenn wir Daten aus Dateien lesen wollen, wenn Texte in der Zeichnung ausgegeben werden sollen und vor allem, wenn es darum geht, Ausgaben an die Kommandozeile zu erzeugen.

Die vier Grundfunktionen, die wir zur Verfügung haben, sind (strcat), (strcase), (substr) und (strlen). Fangen wir bei der letzgenannten an: (strlen) gibt die Länge einer Zeichenkette zurück:
(strlen "Dies ist eine Zeichenkette" ) => 26
                  
Was man dazu noch wissen sollte, ist die Tatsache, dass eine Zeichenkette ohne Länge (Leerzeichenkette) nicht identisch mit nil ist, sondern einfach in der Form "" dargestellt wird. Zwischen den Anführungszeichen ist natürlich keine Leerstelle, denn das wäre dann eine Kette mit der Länge 1.

(strcat) verbindet zwei (oder mehr) Zeichenketten zu einer einzigen:
(strcat "Zeichen" "kette")  => "Zeichenkette"
                  
Wir hatten ja bereits kurz mit der Funktion (princ) zu tun. Diese gibt Zeichenketten (und auch alle anderen Datentypen) am Bildschirm aus.
(princ "Dies ist ein Text") => Dies ist ein Text
                  
Wie wir sehen, werden die Anführungszeichen von (princ) am Bildschirm nicht mit angezeigt. Einen Zeilenumbruch können wir durch Einsetzen des Steuerzeichens '\n' in die Zeichenkette erzwingen.
(princ "Dies ist \nein Text")
  => Dies ist
  => ein Text
                  
Wenn wir eine Zeichenkette in einer Variablen gespeichert haben, können wir (princ) genauso anwenden:
(setq var1 "Ein anderer Text")
    => "Ein anderer Text"

(princ var1)
    => Ein anderer Text
                  
Wenn wir jetzt einen Zeilenumbruch mit der Ausgabe von var1 verbinden möchten, können wir das in Verbindung mit (strcat). Wir haben ja keine Möglichkeit, den Zeilenumbruch direkt in die Zeichenkette einzusetzen.
(princ (strcat "\n" var1))
    ; führt erst einen Umbruch durch und gibt
    ; dann die Zeichenkette aus

(princ (strcat var1 "\n"))
    ; machtes in umgekehrter Reihenfolge
                  
Wir wissen nun, wie man Zeichenketten zusammensetzt. Auseinandernehmen können wir sie mit (substr). Diese Funktion gibt Teilzeichenketten zurück. Die Syntax ist so:
(substr <zeichenkette> <position> [<anzahl>])
                  
Wenn das letzte Argument weggelassen wird, gibt uns (substr) den Rest der Zeichenkette ab position wieder. Zur Verdeutlichung der Arbeitsweise von (substr ...) einige Beispiele:
(substr "Wort" 2 3)    =>    "ort"
(substr "computer" 4)  =>    "puter"
(substr "Anfang" 1 1)  =>    "A"
                  
Das letzte Zeichen einer Kette können wir immer mit folgendem Ausdruck ermitteln:
(substr <zeichenkette> (strlen <zeichenkette>))
                  
Noch ein paar Worte dazu, wie AutoLisp Zeichenketten verarbeitet: Sie erinnern sich sicherlich daran, daá Zeichenketten nicht evaluiert werden bzw. eine Evaluation immer die Zeichenkette selbst ergibt. Was wir auch noch wissen, ist, dass Zeichenketten - im Gegensatz zu Symbolen - von LISP nicht automatisch in Grossbuchstaben umgesetzt werden. Es soll aber auch nicht unerwähnt bleiben, dass Zeichenketten beliebig lang sein können - mit einer Einschränkung allerdings: Zeichenketten, die Sie im Quellcode oder über die Kommandozeile direkt eingeben, sind auf 132 Zeichen beschränkt. Hier kann aber ggf. mit (strcat) nachgeholfen werden.

Lassen Sie uns nun noch kurz die vierte Funktion durchnehmen, nämlich (strcase). Wenn wir (strcase "Dies ist ein Text") eingeben, bekommen wir "DIES IST EIN TEXT" zurück. (strcase) setzt also Zeichenketten in Groábuchstaben um. Wenn wir diese Funktion aber mit einem weiteren Argument aufrufen, setzt sie alles in Kleinbuchstaben um. Der Wert des zweiten Arguments ist dabei unerheblich, es muss nur vorhanden und ungleich nil sein:
(strcase "Dies ist ein Text" 1) => "dies ist ein text"
                  
Diese Umsetzung in Gross- bzw. Kleinbuchstaben hat aber in älteren Versionen von AutoCAD einen gewaltigen Haken, zumindest wenn es um die deutsche Sprache geht - Umlaute und 'ß' werden von (strcase) nämlich ignoriert. (strcase "Rückseite" 1) ergibt also "RüCKSEITE". Dies kann optisch sehr störend sein, und es hat noch einen weiteren schwerwiegenden Nachteil: (strcase) wird eingesetzt, wenn Zeichenketten unabhängig von der Gross-/Kleinschreibung miteiander verglichen werden sollen. Die fehlende Umsetzung von Umlauten kann hier zu Fehlern führen. In den neueren AutoCAD-Versionen ist dieses Problem allerdings behoben, es werden auch die Umlaute und 'ß' umgesetzt.

Das war erst einmal das Wichtigste, was es zum Thema Zeichenketten-Funktionen zu sagen gibt. Im nächsten Kapitel werden wir uns mit einigen Funktionen zum Umwandeln von Zahlen in Zeichenketten usw. befassen.


Übungsaufgaben

  1. Von den vier hier vorgestellten Funktionen sind nur zwei wirklich unverzichtbar, die anderen beiden könnte man sich auch selbst schreiben. Welches sind die beidenn elementaren Funktionen?

  2. Definieren Sie eine Funktion (str-first), die das erste Zeichen eines Strings zurückgibt

  3. Definieren Sie eine Funktion (str-last), die das letzte Zeichen eines Strings zurückgibt

  4. Definieren Sie eine Funktion (str-pos), die feststellt, ob in einer Zeichenkette (1. Argument) ein bestimmtes Zeichen vorkommt (2. Argument). Die Funktion soll, wenn das Zeichen nicht vorkommt, 0 zurückgeben. Wenn es gefunden wurde, wird die Position retourniert.

  5. Definieren Sie eine Funktion, die mit der Syntax (str-insert <zeichenkette> <neue-zeichenkette> <position>) ein oder auch mehrere Zeichen in eine Zeichenkette an der Stelle position einfügt

  6. Definieren Sie eine Funktion (str-reverse <str>), die eine Zeichenkette rückwärts zurückgibt.