Software > Coding
Packed CHAR Array vs. String / ST-Pascal
rainers:
Hallo,
habe schon wieder eine Anfängerfrage.
Da mir die ganzen Bootmanager zu mächtig sind und vor allem keine Auto-Auswahl vorhanden ist, will ich mir selbst einen basteln.
Das ist auch kein Problem, das Ding soll ja nur zwei Dateien kopieren.
Was mich aber stört ist, daß die Datei-Funktionen von ST-Pascal als Dateinamen eine Variable vom Typ
PACKED CHAR ARRAY
erwarten.
Nun steht zwar im Handbuch, man könne an solche Variablen auch Zeichenkettenkonstanten zuweisen, aber ich stelle mich wohl zu dämlich an.
Es gelingt mir einfach nicht.
Egal was versucht wird (direkte Zuweisung, Zuweisung über Zeiger, ...), der Compiler beschwert sich immer über die Inkompatibilität der Typen.
Hat jemand eine Idee, wie man das bewerkstelligen kann?
Zur Zeit geht das Füllen des Arrays halt über die einzelnen Elemente und das ist bei einem langen Pfadnamen schon sehr lästig.
Danke.
-R.
Arne:
Ich kann mich da noch an eine "Lösung" in Turbo Pascal (x86) erinnern.
Die bestand aus:
--- Code: ---asm {
...
}
--- Ende Code ---
Und mittels inline-asm dann die Kopierei selbst erledigt.
1ST1:
Nein, das geht auch ohne Assembler. Ich habe damals auch mit ST-Pascal+ einige Progrämmchen mit Dateioperationen geschrieben, und das funktionierte problemlos. Aber um das nachvollziehen zu können, muss ich es erst mir mal wieder ansehen, meine Pascal-Programmierkünste sind sehr eingerostet...
rainers:
--- Zitat von: 1ST1 am Mi 17.04.2013, 13:35:19 ---Nein, das geht auch ohne Assembler. Ich habe damals auch mit ST-Pascal+ einige Progrämmchen mit Dateioperationen geschrieben, und das funktionierte problemlos. Aber um das nachvollziehen zu können, muss ich es erst mir mal wieder ansehen, meine Pascal-Programmierkünste sind sehr eingerostet...
--- Ende Zitat ---
Das wäre sehr nett von Dir.
Fertig ist das kleine Progrämmchen zwar, aber eben mit der blöden Element-für-Element-Initialisierung.
mfro:
--- Zitat von: Rainer (s) am Mi 17.04.2013, 10:34:50 ---...Was mich aber stört ist, daß die Datei-Funktionen von ST-Pascal als Dateinamen eine Variable vom Typ
PACKED CHAR ARRAY
erwarten.
Nun steht zwar im Handbuch, man könne an solche Variablen auch Zeichenkettenkonstanten zuweisen, aber ich stelle mich wohl zu dämlich an.
Es gelingt mir einfach nicht.
Egal was versucht wird (direkte Zuweisung, Zuweisung über Zeiger, ...), der Compiler beschwert sich immer über die Inkompatibilität der Typen.
Hat jemand eine Idee, wie man das bewerkstelligen kann?
--- Ende Zitat ---
Hallo Rainer,
das geht schon. Das Dumme ist nur, daß Pascal eine streng typisierte Sprache ist. Das heißt, bei der Zuweisung bzw. Konstantendefinition muß auch genau dasselbe zugewiesen werden. Wenn Du eine Variable vom Typ PACKED ARRAY [1..16] OF CHAR hast, mußt Du auch genau 16 Zeichen zuweisen, sonst paßt der Typ nicht:
PROGRAM readwrite;
TYPE
Str16 = PACKED ARRAY[1..16] OF CHAR;
VAR
filename : Str16;
PROCEDURE write_file(VAR str : Str16);
VAR
TextFile : Text;
BEGIN
ReWrite(TextFile, str);
WriteLn(TextFile, 'Hello World');
END; (* write_file *)
BEGIN
filename := 'test.txt ';
write_file(filename);
END. (* readwrite *)
Hier wurde der String "hinten" mit Leerzeichen auf die erforderliche Länge aufgefüllt - das funktioniert (ohne daß die Datei mit Leerzeichen angelegt wird). Eine andere Möglichkeit ist mir (leider) nicht bekannt. Beim Typ STRING ist die Prüfung etwas laxer, leider akzeptieren den die Standard-Dateifunktionen aber nicht.
Gruß,
Markus
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln