VI_read | VBI_read | VSI_read | VLI_read | VQI_read | |
VU_read | VUB_read | VUS_read | VUL_read | VUQ_read | VUI_read |
|
Funktion | Einlesen von im ASCII-Format vorliegenden Zahlen aus einem Stream |
|
Syntax C/C++ | #include <VFstd.h>
void VF_read( fVector X, ui size, FILE *stream ); |
C++ VecObj | #include <OptiVec.h>
void vector<T>::read( FILE *stream ); |
Pascal/Delphi | uses VFstd;
procedure VF_read( X:fVector; size:UIntSize; var Stream:Text ); |
|
CUDA-Funktion C/C++ | #include <cudaVFstd.h>
int cudaVF_read( fVector d_X, ui size, FILE *stream );
int cudaVF_read_buf( fVector d_X, ui size, FILE *stream, fVector h_Wk );
|
CUDA-Funktion Pascal/Delphi | uses VFstd;
function cudaVF_read( X:fVector; size:UIntSize; var Stream:FILE ): IntBool;
function cudaVF_read_buf( X:fVector; size:UIntSize; var Stream:FILE; h_Wk:fVector ): IntBool;
|
|
Beschreibung | size Elemente werden aus stream gelesen und in X gespeichert. Man gebrauche diese Funktion, um Daten von einem anderen Programm zu importieren, das zu einem direkten Datenaustausch oder zum Abspeichern im Maschinen-Format nicht in der Lage ist. Es können auch Vektoren wieder eingelesen werden, die mittels VF_write auf Festplatte ausgelagert wurden. Sofern nicht besondere Gründe für das Funktionenpaar VF_write/VF_read sprechen, benutze man zum Zweck der temporären Auslagerung allerdings lieber das Paar VF_store/VF_recall (schneller und genauer!).
Die Anzahl der Stellen pro Zahl ist auf 80 beschränkt. Man vergewissere sich daher, dass dieses Limit eingehalten wird, da sonst unweigerlich Fehler entstehen.
Komplexe Versionen:
Real- und Imaginärteil (cartesisch-komplex) bzw. Mag- und Arg-Teil (polar) dürfen, müssen aber nicht, durch runde oder geschweifte Klammern, () oder { }, zusammengefaßt sein. Die Behandlung muss einheitlich sein: Entweder müssen alle Elemente so geschrieben sein oder gar keines.
Ein Komma darf, muss aber nicht, zwischen Real- und Imaginärteil bzw. Mag- und Arg-Teil stehen. Der Imaginärteil bzw. der Arg-Teil muss stets explizit angegeben sein, auch wenn er 0 ist.
Beispiele für zulässige Formate sind:
0.3 0.5 (weder Klammern noch Komma)
0.3, 0.5 (keine Klammern; trennendes Komma)
{0.3 0.5} (geschweifte Klammern; kein Komma)
(0.3, 0.5) (runde Klammern und trennendes Komma) |
C/C++-spezifisch: |
Die Einträge müssen durch "Whitespace" voneinander getrennt sein (' ', '\n' oder '\t'). Außerdem darf nach jeder Zahl höchstens ein (!) "Nicht-Whitespace"-Zeichen stehen. Dieses muss ohne Zwischenraum auf die Zahl folgen, und nach ihm muss mindestens ein Whitespace-Zeichen stehen.
Ganzzahl-Versionen außer VQI_read:
Standardmäßig werden die zu lesenden Zahlen als Dezimalzahlen interpretiert. Mittels V_setRadix läßt sich aber auch eine andere Basis definieren. |
GCC-Windows-spezifisch: | Zwar unterstützt GCC auch in der Windows-Portierung den 80-bit-Fließkomma-Typ long double. Die I/O-Routinen verwenden aber die Laufzeitbibliothek von Visual C++, wo 80-bit-long doubles schon seit langem nicht mehr vorkommen. Dies bedeutet, dass VE_read, VCE_read und VPE_read bei GCC nur mit double-Genauigkeit und innerhalb des für doubles möglichen Größenbereiches arbeiten. |
Pascal/Delphi-spezifisch: | Die einzelnen Zahlen müssen durch Leerzeichen (' '), Tabulatoren (#9) oder Zeilenvorschübe (#13) voneinander getrennt sein. Andere Trennzeichen sind nicht zulässig.
Während die C-Version dieser Funktion den Konventionen der C-Funktionen strtod, strtol usw. folgt, richtet sich die Pascal/Delphi-Version nach den Regeln der Pascal/Delphi-Funktion Read. Dies hat eine wesentlich geringere Flexibilität zur Folge:
- keine Trennzeichen außer ' ', #9 und #13 zugelassen,
- keine automatische Anpassung überlaufender Zahlen,
- keine Funktion V_setRadix (mittels derer in der C-Version eine Basis außer 10 für die Ganzzahl-Varianten definiert werden kann). |
|
Fehlerbehandlung | C/C++:
Reelle, komplexe und quad-Versionen:
Überlaufende Zahlen werden stillschweigend auf ±HUGE_VAL abgeschnitten.
Ganzzahl-Versionen außer VQI_read:
Solange sich die Zahlen als long bzw. unsigned long darstellen lassen, werden in den 16-bit-Typen die übergelaufenen Bits ignoriert. Wird dagegen auch der long-Bereich überschritten, so resultiert −1 für vorzeichenbehaftete Typen bzw. der größte darstellbare Wert für vorzeichenlose Typen.
Pascal/Delphi:
Überlaufende oder vom zugelassenen Format abweichende Zahlen führen zu einem I/O-Fehler.
nur CUDA-Versionen: cudaV?_read übernimmt einen Host-Vektor h_Wk als zusätzliches Argument. Dieser dient als Pufferspeicher und muss (mindestens) dieselbe Größe haben wie X. Hierdurch wird die interne Bereitstellung von Pufferspeicher bei cudaV?_read eingespart, so dass cudaV?_read_buf etwas schneller ist.
|
|
|
|