Autor |
Beitrag |
Jojojoxx
      
Beiträge: 386
|
Verfasst: Mi 28.12.05 15:27
Hallo!
Ich habe ein dynamisches Array vom Typen String erzeugt, jedoch lassen sich komischerweise nur CHAR darauf speichern und keine Strings. Hier ist der Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var Matrix:Array of String;
Setlength(Matrix,Pos1); for j:=1 to high(Matrix) do setlength(Matrix[j],2);
Matrix[1,Pos1]:=Nickname; |
Das Array ist doch ein Array of String, wieso akzeptiert der PC nur CHAR???
Danke euch!
mfg
Jojo
Moderiert von raziel: Quote- durch Delphi-Tags ersetzt
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 28.12.05 15:37
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mi 28.12.05 15:40
Hallo
was genau willst du den tun? irgendwie vermischt du hier 2 Sachen.
Zitat: |
Matrix[1,Pos1]:=Nickname;
|
kannst du auch anders schreiben:
Delphi-Quelltext 1:
| Matrix[1][Pos1]:=Nickname; |
also den 1. Eintrag der Matrix (=ein string) und diesen string an Pos1 ändern, und das ist ein char. Das ist bestimm t nicht das, was du willst
Zitat: |
setlength(Matrix[j],2);
|
warum?
mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Jojojoxx 
      
Beiträge: 386
|
Verfasst: Mi 28.12.05 15:45
Hi!
Danke für eure Hilfe!
Ich möchte ein zweidimensionales Array, dass zwei Stellen Breit ist.
Während der Laufzeit werden nur die Y-Werte angepasst, und zwar so, wie die Variable Pos1 groß ist.
Danach möchte ich nur auf die einen Bereich dieses Arrays einen String schreiben.
mfg
Jojo
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mi 28.12.05 15:53
Hallo
du deklarierst aber nur ein eindimensionales Array
Delphi-Quelltext 1:
| var Matrix:Array of array of String; |
und ich denke, daß du
Matrix[1,Pos1] umdrehen muß -> Matrix[Pos1,1]:= ...
sonst sehe ich keinen Sinn dahinter.
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Zuletzt bearbeitet von Keldorn am Mi 28.12.05 16:59, insgesamt 1-mal bearbeitet
|
|
Jojojoxx 
      
Beiträge: 386
|
Verfasst: Mi 28.12.05 16:16
Hi!
Wie kann ich denn ein mehrdimensionales Array deklarieren??
Zitat: | und ich denke, daß du
Matrix[1,Pos1] umdrehen muß -> Matrix[Pos1,1]:= ... |
Wieso das? Zuerst gebe ich doch die X-Stelle an, die heir 1 ist, also die Spalte1 und danach die Y-Werte, also die Reihen, und diese sind Variabel, oder?
mfg
Jojo
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mi 28.12.05 17:07
Jojojoxx hat folgendes geschrieben: |
Wie kann ich denn ein mehrdimensionales Array deklarieren?? |
steht doch schon oben:
Delphi-Quelltext 1:
| var Matrix:Array of array of String; |
Jojojoxx hat folgendes geschrieben: | Wieso das? Zuerst gebe ich doch die X-Stelle an, die heir 1 ist, also die Spalte1 und danach die Y-Werte, also die Reihen, und diese sind Variabel, oder?
|
nein, es ist genau andersrum. Bzw je nach dem, wie du es betrachtest.
Das wird auch deutlich, wenn du dein mehrdimensionales array erstellst
Delphi-Quelltext 1: 2:
| setlength(matrix, Anzahl der Reihen); (Anzahl der Reihen = variabel) |
Delphi-Quelltext 1: 2:
| setlength(matrix[Reihe], Anzahl der Spalten in dieser Reihe); (Anzahl der Spalten in dieser Reihe = 2) |
bei einem dynamischen Array kannst du in jeder Reihe eine unterschiedliche Anzahl von Spalten erstellen. Da du dies nicht tust, kannst du auch gleich
Delphi-Quelltext 1:
| setlength(matrix, Anzahl der Reihen, Anzahl der Spalten); |
nehmen, und sparst dir die for-schleife. Wenn du denkst, du kommst mir der x,y-denkweise besser, mußt du halt die beiden Werte tauschen.
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Jojojoxx 
      
Beiträge: 386
|
Verfasst: Mi 28.12.05 18:26
Hi!
Danke, das hab ich soweit verstanden.
Aber wenn ich nun auf eine Stelle des Arrays etwas schreiben will, in diesem Falle will ich einen String an der Stelle [Pos1,2] setzen, bekomme ich immer eine Fehlermeldung:
Hier der Code:
Zitat: |
var Array of Array of String;
setlength(Matrix, Pos1, 2);
Matrix[Pos1,2]:=Nickname; // In dieser Zeile kommt die Fehlermeldung
|
Zu diesem Zeitpunkt hat Pos1 den Wert "1".
mfg
Jojo
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Mi 28.12.05 18:51
Wenn deine Problemstellung noch gültig ist vergiss das zweidimensionale Array.
Du hast ein dynamisches Array (nebenbei: das ist Null-basiert, das heißt deine Schleife
Zitat: | for j:=1 to high(Matrix) do
setlength(Matrix[j],2); |
wird irgendwann zu einem Fehler führen).
Nun möchtest du in das Array Matrix of string an die STelle 1 oder Pos1 etwas schreiben also musst du an Stelle 1-1 oder Pos1-1 deinen String schreiben:
Delphi-Quelltext 1:
| matrix[pos1-1]:='Nickname'; |
P.s.:In gewisserweise ist dein Array zweidimensional, da Strings ja auch eine Dimension haben. Eine Anweisung:
Delphi-Quelltext 1:
| matrix[pos1,3]:=Nickname |
versucht in den pos1.ten String im Array Matrix an die Stelle 3 (denn STrings sind 1-basiert) ein Wort zu schreiben, eine Stelle in einer Zeichenkette ist nunmal ein Char
|
|
Jojojoxx 
      
Beiträge: 386
|
Verfasst: Mi 28.12.05 19:16
Hi!
Stimmt, Arrays sind Null-basiert, hab ich nicht dran gedacht.
Aber eins verstehe ich nicht so ganz.
Zitat: | matrix[pos1-1]:='Nickname'; |
ist doch nicht eindeutig bei einem 2-dimensionalen Array, da kommt bei mir auch die Fehlermeldung "Inkompatible Typen String und dynamic Array".
Und wieso versucht der Computer bei Matrix[Pos1,3] an der Stelle 3 etwas am String zu ändern? Die eckige Klammer bezieht sich doch auf den Array und sind die x/y-Koordinaten!?
Danke für deine Hilfe!
btw: Es geht darum, eine Art Datenbank anzulegen. Über jeden User sollen bestimmte Daten gespeichert werden, diese werden allerdings nach und nach wieder gelöscht und neue kommen dazu, muss also flexibel sein. Außerdem ist nicht vorgeschrieben aus wievielen Usern die Datenbank besteht. Evtl. gibts dafür ja auch eine bessere und einfachere Lösung!?
mfg
Jojo
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Mi 28.12.05 21:41
Meine Antwort bezog sich auf dein Ursprüngliches Problem: dort fragtest du nach einem array of string welches eindim. ist. Folglich vertägt es auch nur eine Zahl als index Punkt... Das das in deinem Fall auch anders ging liegt daran, was ich oben andeuten wollte, dass Strings ebenfalls eine Dimension haben (Zeichen"Kette"). Der Compiler interpretiert also ein Array of string bei einem Zugriff über zwei Zahlen als Index wie Matrix[i,j]:=Nickname; als ein zweidimensionales Array of char.
Da ich annehme, dass Nickname selber ein Sting ist brauchst du diesen zweiten index nicht. Wenn du ihn aber benutzt dann dann greifst du auf einen einzelnen Character zu.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mi 28.12.05 21:53
|
|
Jojojoxx 
      
Beiträge: 386
|
Verfasst: Do 29.12.05 14:51
Hi!
@Allesquarks: Achso! Dann versteh ich´s auch!
@delfiphan:Scheint so zu klappen, danke dir! Werde es jetzt mal ausführlicher testen...
mfg
Jojo
|
|
|