MF_read MD_read ME_read
MCF_read MCD_read MCE_read
MI_readMBI_readMSI_readMLI_readMQI_read
MU_readMUB_readMUS_readMUL_readMUQ_read
Funktioneine Matrix im ASCII-Format aus einem Stream einlesen
Syntax C/C++#include <MFstd.h>
void MF_read( fMatrix MA, ui ht, ui len, FILE *stream );
C++ MatObj#include <OptiVec.h>
void matrix<T>::read( FILE *stream );
Pascal/Delphiuses MFstd;
{Delphi-Version:}
  procedure MF_read( MA:fMatrix; ht, len:UIntSize; var Stream:TextFile );
{Turbo Pascal-Version:}
  procedure MF_read( MA:fMatrix; ht, len:UIntSize; var Stream:Text );
CUDA-Funktion C/C++#include <cudaMFstd.h>
int cudaMF_read( fMatrix d_MA, ui ht, ui len, FILE *stream );
int cudaMF_read_buf( fMatrix d_MA, ui ht, ui len, FILE *stream, fVector h_Wk );
CUDA-Funktion Pascal/Delphiuses MFstd;
function cudaMF_read( d_MA:fMatrix; ht, len:UIntSize; var Stream:TextFile ): IntBool;
function cudaMF_read_buf( d_MA:fMatrix; ht, len:UIntSize; var Stream:TextFile; h_Wk:fVector ): IntBool;
BeschreibungDie Matrix A mit ht*len Elementen wird im ASCII-Format aus stream eingelesen. Normalerweise wird man diese Funktion verwenden, um Matrizen aus anderen Programmen zu importieren, die Zahlen nicht im PC-Maschinenformat speichern können. Man kann sie auch benutzen, um Matrizen wiederherzustellen, die zuvor mittels MF_write gespeichert wurden. Um Zwischenergebnisse zu speichern und wiederherzustellen, sollte man allerdings das Funktionenpaar MF_store / MF_recall unbedingt gegenüber MF_write / MF_read vorziehen (über die Gründe siehe MF_write).

Komplexe Versionen:
Real- und Imaginär-Teil dürfen (müssen aber nicht) in geschweifte { } oder runde Klammern ( ) eingeschlossen sein. Man muss allerdings konsequent sein: Entweder müssen alle oder gar kein Element eingeklammert sein.
Ein Komma darf (muss aber nicht) zwischen Real- und Imaginärteil stehen. Der Imaginärteil muss stets explizit angegeben werden, auch wenn er gleich 0 sein sollte.
Beispiele für gültige Formate sind:
0.3 0.5    (weder Klammern noch trennendes Komma)
0.3, 0.5    (keine Klammern; Komma zwischen Re und Im)
{0.3 0.5}    (geschweifte Klammern; kein Komma)
(0.3, 0.5)    (runde Klammern und Komma)

C/C++-spezifisch:Die zu lesenden Elemente müssen durch Whitespace (' ', '\n' oder '\t') voneinander getrennt sein. Zusätzlich ist ein (!) "Nicht-Whitespace"-Zeichen nach jedem Eintrag erlaubt, sofern es direkt auf die letzte Ziffer folgt. Nach ihm muss wiederum mindestens ein Whitespace-Zeichen folgen.
Pascal/Delphi-spezifisch:Die zu lesenden Elemente müssen durch Whitespace (' ', #13, or #9) voneinander getrennt sein.

Während die C/C++-Version dieser Funktionen den Konventionen der C-Funktionen strtod, strtol usw. folgt, hat sich die Pascal/Delphi-Version nach den Regeln der Pascal/Delphi Funktion Read zu richten. Hierdurch wird die Pascal/Delphi-Version wesentlich weniger flexibel als die C/C++-Version:
- es sind keine Trennzeichen außer dem Leerzeichen (' ') und #9 erlaubt,
- überlaufende Eingabe-Zahlen werden nicht automatisch abgeschnitten.

nur CUDA-Versionen: cudaM?_read_buf ü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 cudaM?_read eingespart, so dass cudaM?_read_buf etwas schneller ist.

FehlerbehandlungC/C++:
Überlaufende Eingabezahlen werden stillschweigend auf ±HUGE_VAL gesetzt.
Pascal/Delphi:
Überlaufende oder anderweitig nicht den Format-Bestimmungen entsprechende Eingabezahlen führen zu einem I/O-Fehler.
Rückgabewertkeiner, außCUDA-Variante; dort: 0, wenn fehlerfrei, sonst ungleich 0
QuerverweisMF_write,   VF_nread,   MF_store,   MF_recall,   Kap. 14

MatrixLib Inhaltsverzeichnis  OptiVec Home