Autor Beitrag
Jojojoxx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: 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:

ausblenden 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; //Hier kommt der Fehler: "Inkompatible Typen 'CHAR' und 'String'"


Das Array ist doch ein Array of String, wieso akzeptiert der PC nur CHAR???
Danke euch!

mfg

Jojo

Moderiert von user profile iconraziel: Quote- durch Delphi-Tags ersetzt
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 28.12.05 15:37 
user profile iconJojojoxx hat folgendes geschrieben:
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:

ausblenden 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; //Hier kommt der Fehler: "Inkompatible Typen 'CHAR' und 'String'"


Das Array ist doch ein Array of String, wieso akzeptiert der PC nur CHAR???
Danke euch!

mfg

Jojo


Strings sind für Delphi teilkompatibel mit Arrays (Compiler Magic). Du nutzt die Routinen hier falsch:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var Matrix:Array of String;

Setlength(Matrix,Pos1);

//Remove this Bullshit ... This does set the internal size of the strings
//for j:=1 to high(Matrix) do
//  setlength(Matrix[j],2);

//Use only ONE index, you've only a 1D-Array here!
Matrix[1]:=Nickname; //Hier kommt kein Fehler mehr ...

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mi 28.12.05 15:53 
Hallo

du deklarierst aber nur ein eindimensionales Array

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mi 28.12.05 17:07 
user profile iconJojojoxx hat folgendes geschrieben:


Wie kann ich denn ein mehrdimensionales Array deklarieren??

steht doch schon oben:
ausblenden Delphi-Quelltext
1:
var Matrix:Array of array of String;					


user profile iconJojojoxx 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
ausblenden Delphi-Quelltext
1:
2:
setlength(matrix, Anzahl der Reihen);
(Anzahl der Reihen = variabel)


ausblenden 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

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: 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:

user defined image

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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
matrix[pos1-1]:='Nickname';					


P.s.:In gewisserweise ist dein Array zweidimensional, da Strings ja auch eine Dimension haben. Eine Anweisung:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 28.12.05 21:53 
Wenn die Spaltenanzahl fix ist, dann macht es nicht unbedingt Sinn, das dynamisch zu lassen. Geschickter wäre folgende Konstruktion:
ausblenden Delphi-Quelltext
1:
array of array[1..2of String					

Oder -- um semantische Fehler zu vermeiden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type
 TXyString = record
  col1, col2: String;
 end;
var
 MyArray: array of TXyString;
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Do 29.12.05 14:51 
Hi!

@Allesquarks: Achso! Dann versteh ich´s auch! :D

@delfiphan:Scheint so zu klappen, danke dir! Werde es jetzt mal ausführlicher testen...

mfg

Jojo