Ein array das mit lookup() benutzt werden kann, besteht aus Text-Strings, wobei jeder String einen Daten-Record darstellt.
Jeder Daten-Record enthält eine beliebige Anzahl von Feldern, die durch das Zeichen separator (default ist '\t', der Tabulator) getrennt sind. Das erste Feld in einem Record wird als key benutzt und hat die Nummer 0.
Alle Records müssen eindeutige key-Felder haben. Keines der key-Felder darf leer sein - ansonsten ist nicht definiert welcher Record gefunden wird.
Enthält der erste String in array einen "Header"-Record (der Record, in dem der
Inhalt der Felder beschrieben wird), bestimmt lookup mit einem String
field_name automatischen den Index des Feldes. Das erlaubt es, die lookup-Funktion
zu benutzen, ohne genau zu wissen, welcher Feld-Index die gewünschten Daten enthält.
Es bleibt dem Benutzer überlassen, sicherzustellen, dass der erste Record tatsächlich
Header-Informationen enthält.
Ist der key-Parameter beim Aufruf von lookup() ein leerer String, wird der erste String von array verwendet. Das erlaubt dem Programm zu bestimmen, ob ein Header-Record mit den gewünschten Feld-Namen existiert.
Enthält ein Feld das separator-Zeichen, muss es in Anführungszeichen
eingeschlossen werden (wie in "abc;def", wobei hier das Semikolon (';')
das Trennzeichen ist). Das gilt auch für Felder, die Anführungszeichen
(") enthalten, wobei die Anführungszeichen im Feld verdoppelt werden müssen
(wie hier: "abc;""def"";ghi" ergibt also abc;"def";ghi).
Es wird empfohlen den "tab"-Separator (default) zu verwenden, der diese Probleme nicht
kennt (kein Feld kann einen Tabulator enthalten).
Hier folgt eine Beispiel-Daten-Datei (zur besseren Lesbarkeit wurde der Separator ';' verwendet):
Name;Manufacturer;Code;Price 7400;Intel;I-01-234-97;$0.10 68HC12;Motorola;M68HC1201234;$3.50
Beispiel
string OrderCodes[]; if (fileread(OrderCodes, "ordercodes") > 0) { if (lookup(OrderCodes, "", "Code", ';')) { schematic(SCH) { SCH.parts(P) { string OrderCode; // both following statements do exactly the same: OrderCode = lookup(OrderCodes, P.device.name, "Code", ';'); OrderCode = lookup(OrderCodes, P.device.name, 2, ';'); } } } else dlgMessageBox("Missing 'Code' field in file 'ordercodes'); }
Index | Copyright © 2005 CadSoft Computer GmbH |