Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Array of String wird nicht als solches erkannt (https://www.delphipraxis.net/162391-array-string-wird-nicht-als-solches-erkannt.html)

St0rmhunter 20. Aug 2011 14:51

Array of String wird nicht als solches erkannt
 
Hallo Leute 8-)

bin neu hier von daher hoffe ich mal ich bin hier richtig mit dem Post sonst bitte verschieben :S

Naja mein Problem ist ich habe ein Array of String deklariert und wenn ich dann in das erste Array etwas schreiben will wird das Array als normaler String erkannt und der Compiler denkt ich will auf einen Buchstaben im String zugreifen. Fehlermeldung "got AnsiString expected Char".

Variablen deklaration:
Delphi-Quellcode:
var
  Form2: TForm2;
  Text: Array of String;
  i: Integer;
Procedure des Buttons (sollte eine Prozedur zum ausprobieren ob man Memo Zeilen in einem String speichern kann ,Zeile für Zeile, und wie gesagt sie funktioniert nicht):
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  setlength(Text,(memo1.lines.count));
for i:=0 to memo1.lines.Count do
begin
  Text[i]:=memo1.Lines[i];
  memo2.Lines[i]:=Text[i];
end;
end;
Hoffe ihr habt eine Idee was hier falsch ist, kleine Bemerkung wir benutzen in der Schule Lazarus :?

Danke schonmal :thumb:

Fusel 20. Aug 2011 15:04

AW: Array of String wird nicht als solches erkannt
 
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  setlength(Text,(memo1.lines.count));
  for i:=0 to memo1.lines.Count do
  begin
    Text[i]:=memo1.Lines[i];
    memo2.Lines[i]:=Text[i];
  end;
end;
Müßte mit

for i:=0 to memo1.lines.Count - 1 do

funktionieren

USchuster 20. Aug 2011 15:05

AW: Array of String wird nicht als solches erkannt
 
Folgendes Beispiel compiliert wenigsten mit Delphi 5 bis XE und die Prozedur tut es auch mit Lazarus.

Delphi-Quellcode:
program Project110;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

procedure StringArrayTest;
var
  I: Integer;
  SL: TStringList;
  Text: array of string;
begin
  SL := TStringList.Create;
  try
    for I := 1 to 10 do
      SL.Add(Format('Zeile %d', [I]));
    SetLength(Text, SL.Count);
    for I := 0 to SL.Count - 1 do
    begin
      Text[I] := SL[I];
      SL[I] := Text[I];
    end;
  finally
    SL.Free;
  end;
end;

begin
  StringArrayTest;
end.
Ich tippe auf Scope Probleme.

MondiBob 20. Aug 2011 15:05

AW: Array of String wird nicht als solches erkannt
 
Delphi-Quellcode:
Text
ist in
Delphi-Quellcode:
TControl
schon definiert, gib deinem array mal einen anderen Name. Übrigens solltest du
Delphi-Quellcode:
i
nicht global deklarieren

St0rmhunter 20. Aug 2011 15:33

AW: Array of String wird nicht als solches erkannt
 
Danke für eure antworten:thumb:

@Fusel tut mir Leid deine Variante hat nicht funktioniert.

@USchuster Respekt man sieht du hast ahnung ^^ aber für mich war das etwas zu kompliziert hab noch nicht lange informatik kenne also noch nicht so viele Begriffe. Ich sag mal ich hab nur Bahnhof verstanden^^ trotzdem danke ;)

@MondiBob Ich hab mein Array of String jetzt umbenannt in memText1 und jetzt funktionierts vielen Dank für die einfache Lösung :thumb:

St0rmhunter 20. Aug 2011 17:25

AW: Array of String wird nicht als solches erkannt
 
Liste der Anhänge anzeigen (Anzahl: 1)
:!:Als erstes ich denke mal mir hierbei zu helfen könnte schwer werden und lange dauern bis man überhaupt erstmal durchblickt :S (nur so kleiner Tipp). Bitte sagt mir nicht, dass ich ein paar Sachen hätte einfacher machen können, das sagen so viele zu mir:wink::!:

So da das Testprogramm lief habe ich die prozedur jetzt mit in meinen Cäsar-Coder eingebaut. Für die die es nicht wissen der Cäsar Code ist eine Möglichkeit Nachrichten zu verschlüsseln, indem man den Buchstaben neue Werte zuweist. Beispiel:
A bekommt den neuen Wert B zugewiesen -> verschiebung um 1 -> C wird um 1 verschoben, also wird C dann zu D.
Eine Nachricht wird immer einheitlich Verschoben ... nicht ein Buchstabe um 2 der andere um 15.

Ja jedenfalls habe ich 2 Memos zum, das eine zum Eintragen der Nachricht das andere zum Ausgeben der decodierten / codierten Variante.
Bei der Prozedur, in der PC selbst alle Verschiebungsmöglichkeiten durchgeht und sie alle ausgibt und man die Richtige raussuchen kann funktioniert nur nicht. Er gibt die Decodierte Variante des Textes aus aber nur mit der Verschiebung um 1, die Anderen Varianten zB mit der Verschiebung um 5 werden nicht angezeigt. Dann erscheint eine Fehlermeldung Acces Violation. :cry: keine Ahnung wo der Fehler liegt hier der Quellcode der Prozedur die eigentlich alle decodierten Möglichkeiten des eingegebenen Textes ausgeben soll, wenn die Verschiebung nicht bekannt ist.

Delphi-Quellcode:
var
  Form5: TForm5;
  memText1: Array of String;
  temp1,temp2: String;
  i,j,Zahl1,Zahl2,lauf: Integer;
  buchstabe: char;


procedure TForm5.Button1Click(Sender: TObject);
begin
for lauf:=1 to 51 do
begin
      setlength(memText1,(memo1.lines.count));
for i:=0 to memo1.lines.Count do
begin
  memText1[i]:=memo1.Lines[i];
  temp1:=memText1[i];
  temp2:='';
  for j := 0 to length(temp1) do
  begin
  buchstabe:=temp1[j];
  Zahl1:=Ord(buchstabe);
  if (Zahl1<65) or (Zahl1>122) or ((Zahl1>90)and(Zahl1<97)) then
  temp2:=temp2+temp1[j]
  else
  begin
  Zahl2:=Zahl1-lauf;
  if (Zahl2<65) then
  Zahl2:=Zahl2+58;
  if (Zahl2>90) and (Zahl2<97) then
  Zahl2:=Zahl2-6;
  temp2:=temp2+Chr(Zahl2);
  end;
  end;
  temp2[1]:=' ';
  memo2.lines.add(temp2);
end;
end;
memo2.lines.add('++++++++++++++++++++++++++');
memo2.lines.add('Verschiebung um ' + inttostr(lauf) + ' beendet');
memo2.lines.add('++++++++++++++++++++++++++');
end;
:!::!::!:Bemerkung zum Verschieben Wandel ich die Buchstaben in Ascii-codes um Rechne + die Verschiebung und wandle sie zurück, dabei fange ich Sonderzeichen und alles andere was keine Buchstaben ab (funktioniert auch), sodass aus einem z kein , wird.:!::!::!:

Hier das komplette Projekt für den der es haben will / sich ansehen will.:!:Vorsicht es ist mit Lazarus geschrieben:!: Der unterste Button im Hauptmenü (wenn ihr das Programm startet) führt euch zur Form mit den Problemen^^ ... Na gut bei den anderen Formen taucht auch der Acces Violation Fehler auf, ich hab halt nur die unterste genommen als Beispiel^^.

Danke schonmal an die geduldigen, hilfsbereiten Leute die sich mit dem nicht leicht zu lösenden Problem von mir befassen.

himitsu 20. Aug 2011 18:40

AW: Array of String wird nicht als solches erkannt
 
Wie schon erwähnt: Warum sind alle Variablen global deklariert?

Hätte man sie lokal deklariert, dann häte es nichtmal ein Problem mit Text gegeben, da immer das genommen wird, was "näher" deklariert ist und Global ist ganz, ganz, wirklich ganz weit weg.

St0rmhunter 20. Aug 2011 19:16

AW: Array of String wird nicht als solches erkannt
 
Danke für den Tipp, hab alle mal lokal deklariert hat, aber nichts gebracht :cry:

Ich deklariere Variablen fast immer Global, da mein Informatiklehrer großen Wert darauf legt global zu deklarieren, lokal dürfen wir nur in Ausnahmen.

Nochmal danke für den Tipp :)

EWeiss 20. Aug 2011 19:17

AW: Array of String wird nicht als solches erkannt
 
Bin kein Informatiker!
Aber der Lehrer sollte nochmal in die Lehre gehn. :)

gruss

himitsu 20. Aug 2011 19:28

AW: Array of String wird nicht als solches erkannt
 
In Delphi gibt es in den Projektoptionen eine eine Option für eine Bereichsprüfung.
Ich hoffe/vermute mal, aß Lazarus dieses auch besitzt und wenn ja, dann aktiviere diese mal.

Delphi-Quellcode:
{$R+}
bzw.
Delphi-Quellcode:
{$RANGECHECKS ON}


Delphi-Quellcode:
for j := 0 to length(temp1) do
.
String-Indize beginnen bei 1 und enden bei Length.

Array-Indize (dynamischer Arrays) beginnen bei 0, bzw. Low und enden bei Length-1, bzw. High.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz