|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
eva_b
Anmeldungsdatum: 28.11.2004 Beiträge: 1 Wohnort: München
|
Verfasst am: 28.11.2004, 10:47 Titel: matrix aus excel in QB richtig einlesen? |
|
|
hi!
ich habe eine matrix m*n aus einer excel-tabelle. diese kann ich z. b. im CSV-format speichern. ich bekomme die einzelnen zeilen dann auch in QB eingelesen, mit LINE INPUT #1, a$. Allerdings habe ich dann den ganzen String auf einmal, mit semikolon getrennt.
Wie kann ich es anstellen, dass ich den eingelesenen zahlen gleich matrixelemente A(x,y) zuordne?
Hintergrund ist, dass ich diese matrixelemente dann "umsortieren" möchte.
wer hat da einen tipp? |
|
Nach oben |
|
|
Mecki Igel
Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
Verfasst am: 28.11.2004, 10:59 Titel: |
|
|
Hi,
Am einfachsten wäre es, wenn du nicht mit Semikolon, sondern mit nem schlichten Komma speichern könntest - dann wärs möglich, einfach mit INPUT nacheinander die Spalten und Zeilen einzulesen.
Allerdings weißt du dann nicht automatisch, wieviele Spalten es gibt und innerhalb des Textes zwischen zwei (ehemaligen) Semikolons, die jetzt kommas sind, dürfte kein Komma mehr stehen, weil das wiederum das Programm durcheinander brächte. Darum hab ich mir mal folgenden Code überlegt:
was du brauchst, ist der Befehl MID$(String$, Position, Länge).
Angenommen deine Zeile steht in Z$.
jetzt kannst du mit
Code: | FOR c = 0 TO LEN(Z$) 'Zeichenkettenlänge von Z$
B$ = MID$(Z$, c, 1)
NEXT c |
Buchstabe für Buchstabe nacheinander in B$ anschaun.
Wenn B$ also mal ein ";" ist, muss was passieren.
Folgenden Code könntest du verwenden, um alles zwischen zwei ";" nacheinander in ein ARRAY zu schreiben.
Z$ ist wieder dein $tring, den du Zeile für Zeile aus der Datei importierst.
Code: |
Z$=Z$+";" 'Falls am Schluss kein ";" ist, wird sonst das letzte Element nicht ausgewertet, daher füge ich hier ein Semikolon hinzu.
DIM SpaltenInhalt$(1 TO 40) ' Dimensioniert das Array für maximal 40 verschiedene Einträge. (mit einem 2D-Array könntest du dann gleich die ganze Tabelle in ein Array laden, aber ich denke, dass du das nicht brauchst)
ArrayNummer = 1
FOR c = 0 TO LEN(Z$) 'Zeichenkettenlänge von Z$
B$ = MID$(Z$, c, 1)
IF B$ = ";" THEN
SpaltenInhalt$(ArrayNummer)=SAMMEL$ 'Sammel-String ins Array schreiben
SAMMEL$="":B$="":ArrayNummer = ArrayNummer + 1 'ArrayNummer um 1 erhöhen
END IF
SAMMEL$=SAMMEL$+B$ 'Sammelt alle Zeichen. Dieser Sammel-String wird nach dem Übertragen ins Array wieder geleert und sammelt dann aufs Neue.
NEXT c
|
Ich hoff mal, dass das ungefähr funktioniert.
In SpaltenInhalt$(1), SpaltenInhalt$(2) usw hast du dann den Inhalt der verschiedenen Spalten, wie der Variabel-Name schon sagt
Grüßle,
Mecki _________________ » Yodl.de: So sucht man gestern.
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 29.11.2004, 00:09 Titel: |
|
|
wenn du genau weißt, dass in [b]jeder Zeile eine Bestimmte Anzahl von Semikolons vorkommt brauchst du die ganzen Routinen nicht.
wenn du weißt wie viele Teile in einer Zeile stehen kannst du das einfach in mehrere Variablen einlesen:
Code: | INPUT #1, teil1$, teil2$, teil3$, teil4$ |
das musst du halt mit so vielen teilen machen wie da auch drinstehen, also immer ein Teil mehr als Semikolons in der Zeile sind.
wenns unterschiedlich viele werden hast du aber kaum noch ne Chance, es sei denn es sind immer abwechselnd 2 Teile, 3 Teile, 2 Teile, 3 Teile oder irgendein System. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|