| |
|
|
p.specht
| Das Thema "Matrix de Excel-CSV matemáticamente correcto indexiert einlesen" grenzt scheinbar a una Kunstform: El matemáticamente korrekte Indexierung en uno Matrix lautet bekanntlich M_Zeilenindex,Spaltenindex, y beide Indizes beginnen con 1. Das wäre auch en XProfan en el Principio realisierbar, obwohl entonces wegen des Beginns en 0 una gewisse Platzverschwendung stattfinden sería. En berechneten Indizes en Ensamblador aber wäre el geradezu una Katastrophe, deshalb wäre Yo persönlich geneigt, de Null weg a indizieren:
Declarar M![Zeilenanzahl-1,Spaltenanzahl-1] con Aufruf: M![Línea-1,Spalte-1]
Größere Matrizen schreibt uno mejor igual en Excel (oder Calc de OpenOffice, oder en LibreOffice) y exportiert esta como CSV con Spaltentrenner ´|´ y Zeilentrenner (z.B. ´;´). Ein direktes Einlesen de el Expediente incluso quería me bisher no gelingen, beide Programas uso Kompressionsalgorithmen. Beim Einlesen puede ser aber wenigstens igual el Descripción en Form de Zeilen- y Spaltenüberschriften loswerden, el en Berechnung en XProfan ohnehin sólo lästig wären (Wohlgemerkt, lo va natürlich en Operationen, el el Tabellenprogramm incluso no beherrscht, etwa Spannbaumoptimierung etc.)
Aus technischen Gründen landen nun el una cierto konstante Línea laufende Spaltenindexe (Im Volksmund "Zeilenweises einlesen" genannt) NICHT hintereinander en el Speicher! XProfan, aber z.B. auch Pascal y Fortran, halten Arrays SPALTENWEISE en el Speicher: Erst se el todo "Nullte Spalte" eingelesen, entonces el todo "Spalte 1" usw. Es para Ensamblador GUT, porque el Spaltenelemente entonces para Operationen gemeinsam en el schellen Cache mantenido voluntad puede.
El Übersetzung el Indizes en Speicherplatz-Adressen va entonces relativ simplemente: Basisadresse el Statisch definierten Matrix: Addr(M![0,0]) Laufindex = (Mathematischer_Spaltenindex-1)*Zeilenanzahl + (Mathematischher_Zeilenindex-1) Adressversatz = Laufindex * 8
Umgekehrt gilt: Mathematischer_Spaltenindex = Laufindex \ Zeilenanzahl + 1 Mathematischer_Zeilenindex = (Laufindex mod Zeilenanzahl) + 1
Título de la ventana "Excel-Matrix CSV-Export matemáticamente korrekt indexiert einlesen"
Ventana de Estilo 24:CLS:font 2
Declarar data$,tst$[],zl$[],n&,m&
data$="Tabelle|Über B1|Über C1|Über D1;"+\
"Seite A1|11|12|13;"+\
"Seite A2|21|22|23;"+\
"Seite A3|31|32|33;"+\
"Seite A4|41|42|43;"+\
"Seite A5|51|52|53"
tst$[]=explode(data$,";"):n&=sizeof(tst$[])-1
clear zl$[]:zl$[]=Explode(tst$[1],"|"):m&=sizeof(zl$[])-1
declarar M![n&-1,m&-1],i&,j&
Whileloop 0,n&-1:i&=&Loop
clear zl$[]:zl$[]=Explode(tst$[i&+1],"|"):m&=sizeof(zl$[])-1
whileloop 0,m&-1:j&=&Loop
M![i&,j&]=val(zl$[j&+1])
endwhile
endwhile
Conjunto("Decimals",1)
imprimir "Numerischen Teil como Float ";n&;" X ";m&;"-Matrix eingelesen:\n"
Whileloop 0,n&-1:i&=&Loop
whileloop 0,m&-1:j&=&Loop
Imprimir M![i&,j&],
endwhile:imprimir
endwhile:imprimir
waitinput
end
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 26.05.2021 ▲ |
|
|
|