VF_readVD_readVE_read
VCF_readVCD_readVCE_read
VPF_readVPD_readVPE_read
VI_readVBI_readVSI_readVLI_readVQI_read 
VU_readVUB_readVUS_readVUL_readVUQ_readVUI_read
FunktionEinlesen 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/Delphiuses 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/Delphiuses 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;
Beschreibungsize 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).

FehlerbehandlungC/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.

Rückgabewertkeiner
QuerverweisVF_nread,   VF_write,   VF_store,   VF_recall,   strtod,   strtol

VectorLib Inhaltsverzeichnis  OptiVec Home