VF_nreadVD_nreadVE_nread
VCF_nreadVCD_nreadVCE_nread
VPF_nreadVPD_nreadVPE_nread
VI_nreadVBI_nreadVSI_nreadVLI_nreadVQI_nread 
VU_nreadVUB_nreadVUS_nreadVUL_nreadVUQ_nreadVUI_nread
FunktionEinlesen der Spalten einer im ASCII-Format vorliegenden Tabelle aus einem Stream
Syntax C/C++#include <VFstd.h>
void VF_nread( unsigned n, ui size, FILE *stream, ... );
Pascal/Delphiuses VFstd;
procedure VF_nread( VecList:^fVector; n:Word; size:UIntSize; var stream:Text );
Beschreibung C/C++n Spalten einer Tabelle werden in die an VF_nread übergebenen Vektoren eingelesen. Die Anzahl der Zeilen gibt also die Anzahl der Elemente jedes Vektors an: size.

Die einzelnen Einträge einer Zeile sollten durch Leerzeichen (' ') oder Tabulatoren ('\t') voneinander getrennt sein.

Jede Zeile muss durch einen Zeilenvorschub ('\n') abgeschlossen sein. Die Zeilenlänge ist dabei gemäß folgenden Regeln begrenzt:
- Entweder alle Zeilen sind gleich lang. Dann wird die Länge automatisch bestimmt und darf im Prinzip bis zu 65535 Zeichen betragen.
- Oder die maximale Länge einer Zeile richtet sich nach dem Datentyp und der Anzahl n einzulesender Vektoren:
 
VF_ 24*n
VBI_,   VUB_13*n
VD_ 32*n
VSI_,   VUS_21*n
VE_ 40*n
VLI_,   VUL_37*n
VCF_,   VPF_ 48*n
VQI_32*n
VCD_,   VPD_ 64*n
VI_,   VU_wie VLI_,   VUL_
(in den 16-bit-Modellen wie VSI_,   VUS_)
VCE_,   VPE_ 80*n
 

Es ist möglich, weniger Vektoren einzulesen als eine Tabelle Spalten hat. Dann bleiben die hintersten Spalten unberücksichtigt. Liegen jedoch weniger Spalten vor als Vektoren eingelesen werden sollen, ist mit merkwürdigen bis katastrophalen Ergebnissen zu rechnen.

Komplexe Versionen (cartesisch und polar):
Real- und Imaginärteil (bzw. Mag- und Arg-Teil) dürfen (müssen aber nicht) durch geschweifte Klammern { } zusammengefaßt sein. Die Behandlung muss aber einheitlich sein: Entweder alle oder gar kein Element darf mit geschweiften Klammern geschrieben sein!

Ganzzahl-Versionen außer VQI_nread:
Standardmäßig werden die zu lesenden Zahlen als Dezimalzahlen interpretiert. Mittels V_setRadix läßt sich aber auch eine andere Basis zwischen 2 und 36 definieren.

Beispiel C/C++VF_nread( 3, 100, DataFile, X, Y, Z );
 
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_nread, VCE_nread und VPE_nread bei GCC nur mit double-Genauigkeit und innerhalb des für doubles möglichen Größenbereiches arbeiten.
Beschreibung Pascal/Delphin Spalten einer Tabelle werden in die als Liste VecList an VF_nread übergebenen Vektoren eingelesen. Die Anzahl der Zeilen ist durch size, die Anzahl der Elemente jedes Vektors, gegeben.

Die einzelnen Einträge einer Zeile müssen durch Leerzeichen (' ') oder Tabulatoren (#9) voneinander getrennt sein. Andere Trennzeichen sind nicht zulässig. Jede Zeile muss durch einen Zeilenvorschub (#13) abgeschlossen sein.

Es ist möglich, weniger Vektoren einzulesen als eine Tabelle Spalten hat. Dann bleiben die hintersten Spalten unberücksichtigt. Liegen jedoch weniger Spalten vor als Vektoren eingelesen werden sollen, ist mit merkwürdigen bis katastrophalen Ergebnissen zu rechnen.

Komplexe Versionen (cartesisch und polar):
Real- und Imaginärteil (bzw. Mag- und Arg-Teil) dürfen (müssen aber nicht) durch geschweifte Klammern { } zusammengefaßt sein. Sie müssen voneinander durch Leer- oder Tab-Zeichen getrennt sein. Die Behandlung muss aber einheitlich sein: Entweder alle oder gar kein Element darf mit geschweiften Klammern geschrieben sein! Zusätzlich ist ein unmittelbar (ohne vorherigen Whitespace) auf den Realteil folgendes Komma zugelassen.

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 der Pascal/Delphi-Version zur Folge:
- keine Trennzeichen außer ' ' und #9 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).
 

Beispiel Pascal/Delphivar MyFile: Text;
    X, Y1, Y2: fVector;
    VList: array[0..2] of fVector;
begin
    X := VF_vector( 100 );
    Y1 := VF_vector( 100 );
    Y2 := VF_vector( 100 );
    VList[0] := X; VList[1] := Y1; VList[2] := Y2;
    Assign( MyFile, 'Myfile.DAT' );
    Reset( MyFile );
    VF_nread( @VList, 3, 100, MyFile );
    ...
end;
FehlerbehandlungC/C++:
Reelle, komplexe und quad-Versionen:
Überlaufende Zahlen werden stillschweigend auf ±HUGE_VAL abgeschnitten.
Ganzzahl-Versionen außer VQI_nread:
Solange sich die Zahlen als long bzw. unsigned long darstellen lassen, werden in den kleineren Daten-Typen die übergelaufenen Bits ignoriert. Überschreiten die Zahlen aber auch den long-Bereich, so resultiert −1 (vorzeichenbehaftete Typen) bzw. der größte darstellbare Wert (vorzeichenlose Typen).
Pascal/Delphi:
Überlaufende oder anderweitig nicht den Format-Beschränkungen genügende Zahlen führen zu einem I/O-Fehler.
Rückgabewertkeiner
QuerverweisVF_nwrite,   VF_read,   VF_store,   VF_recall, strtod,   strtol (nur C/C++)

VectorLib Inhaltsverzeichnis  OptiVec Home