MID$

Aus C64-Wiki
Zur Navigation springenZur Suche springen
MID$
Syntax: MID$(<Zeichenkette>,<Startposition>[,<Länge>])
Parameter
<Zeichenkette>: Zeichenkettenausdruck, aus der ein Teil kopiert wird
<Startposition>: numerischer Ausdruck mit der Position, ab der kopiert wird
<Länge>: numerischer Ausdruck mit der maximale Zeichenanzahl, die kopiert werden
Einordnung
Typ: String-Funktion
Kontext: Stringbearbeitung
Aufgabe: Teil einer Zeichenkette zurückgeben
Abkürzung: mI
Token: $ca (202)
Verwandte Befehle
LEFT$, RIGHT$

Anmerkung: Dieser Artikel beschreibt die Zeichenketten-Funktion MID$ unter BASIC V2 des Commodore 64.

Die BASIC-Funktion MID$() liefert jenen Teil der Zeichenkette (1. Argument), der bei der Startposition (ganzzahliger Wert 2. Argument) beginnt und die angegebene Länge (ganzzahliger Wert 3. Argument) besitzt. Ohne 3. Argument wird der Teil bis zum Ende der Zeichenkette verwendet.

Die Startposition kann immer Werte von 1 bis 255 und die Länge immer Werte von 0 bis 255 annehmen, unabhängig davon, ob der geforderte Ausschnitt die Zeichenkette nur teilweise oder gar nicht bedeckt. In der Anwendung dieser Funktion bleiben einem so aufwendige Abfragen von Argumentengrenzen erspart, weil der Basic-Interpreter hier nicht mit einem Abbruch samt Fehlermeldung reagiert. Nur wenn ein Argumentwert außerhalb des jeweiligen Wertebereichs ist, erscheint ?ILLEGAL QUANTITY ERROR. Ist das 1. Argument keine Zeichenkette, wird die BASIC-Fehlermeldung ?TYPE MISMATCH ERROR ausgegeben. Fehlt das Zeichenketten- und/oder das 2. (numerische) Argument, so erscheint ?SYNTAX ERROR.

Eine Fließkommazahl bei einem numerischen Argument wird implizit (wie mit der Funktion INT) als die nächst kleinere Ganzzahl verstanden.

Eine leere Zeichenkette (Leerstring mit der Länge Null, entsprechend A$="") wird retourniert, wenn die Startposition größer als die Zeichenkette lang ist oder die Länge mit 0 angegeben ist. Das 3. Argument für die Länge darf weggelassen werden. Ist es nicht gesetzt oder sein Wert größer als die Anzahl der restlichen Zeichen der Zeichenkette, werden die restlichen Zeichen bis zum Ende der Zeichenkette verwendet.


MID$ ab BASIC 3.5

Ab BASIC 3.5 kann MID$ nicht nur als Funktion, sondern auch als Ziel einer Zuweisung verwendet werden:

Allgemeine Programmier-Syntax:
 MID$(<Zeichenkettenvariable>,<Startposition>[,<Länge>])=<NeueZeichenkette>

In der Variable <Zeichenkettenvariable> werden die Zeichen ab <Startposition> durch die Zeichen in <NeueZeichenkette> ersetzt. Der optionale Parameter <Länge> wird in BASIC 3.5 ignoriert, in BASIC 7.0 gibt er an, wie viele Zeichen ersetzt werden sollen. Passen die neuen Zeichen nicht komplett in die Variable, wird ein ?ILLEGAL QUANTITY ERROR ausgegeben.

Beispiele[Bearbeiten | Quelltext bearbeiten]

10 A$="SAMSTAG MORGEN"
20 B$=MID$(A$,5,3): PRINT B$   (es wird "TAG" herauskopiert und ausgegeben)
30 B$=MID$(A$,1,7): PRINT B$   (genauso wie LEFT$(A$,7) ;es wird "SAMSTAG" herauskopiert und ausgegeben)
40 B$=MID$(A$,9): PRINT B$     (genauso wie RIGHT$(A$,6) oder MID$(A$,9,6); es wird "MORGEN" herauskopiert und ausgegeben)
10 A$="SAMSTAG MORGEN"
20 FOR X=1 TO LEN(A$)+1 
30 PRINT TAB(X) MID$(A$,X,1): NEXT X

Ein Text wird schräg über den Bildschirm geschrieben.

100 A$="STRING"
110 PRINT "LEFT >>>>>>>>"
120 FOR C=0 TO LEN(A$)+3: REM ANZAHL DER ZEICHEN
130 PRINT MID$(A$,1,C), LEFT$(A$,C)
140 NEXT C
150 PRINT
210 PRINT "RIGHT >>>>>>>>"
220 FOR C=0 TO LEN(A$)+3: REM ANZAHL DER ZEICHEN
150 PRINT MID$(A$,(LEN(A$)-C ) * -(C<LEN(A$))+1,C), RIGHT$(A$,C)
240 NEXT C
250 PRINT
310 PRINT "RIGHT (EINFACH) >>>>>>>>"
320 FOR C=0 TO LEN(A$)+3: REM ANZAHL DER ZEICHEN
340 PRINT MID$(A$,LEN(A$)-C+1), RIGHT$(A$,C)
240 NEXT C

Mit MID$() sind die Funktionen LEFT$() und RIGHT$() nachgebildet. Die einfache RIGHT$-Nachbildung (ab Zeile 310) ist allerdings empfindlicher und bricht hier mit ?ILLEGAL QUANTITY ERROR ab!


BASIC 3.5

1000 MID$(RECORD$,6) = NAME$

Namensänderung in einem Datensatz (typischerweise bei Datensätzen mit fixen Feldgrößen, z.B. für eine Relativdatei), der in diesem Fall nicht neu zusammen gestellt werden muss (und so die Speicherverwaltung der Zeichenketten entlastet). Dabei wird vorausgesetzt, dass RECORD$ mindestens so viele Zeichen enthält, wie die Länge von NAME$ plus 5, da sonst mit einem ?ILLEGAL QUANTITY ERROR zu rechnen wäre.