Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Daten aus Listbox in Array speichern. (https://www.delphipraxis.net/148914-daten-aus-listbox-array-speichern.html)

Muddy 10. Mär 2010 20:05


Daten aus Listbox in Array speichern.
 
Hallo Leute :) Ich möchte ein in einem Programm aus der Listbox Daten in ein Array peichern, aber leider kommt es dabei ständig zu einem Problem :)

Delphi-Quellcode:
procedure TForm1.EIntrgeListboxinAraybernehmen1Click(Sender: TObject);
var Vposition:integer;
    zeile,buffer: String;
begin
  while zaehler <> listbox1.Count-1 do
    begin
      with Verkehr[zaehler] do
        begin
          zeile:=listbox1.Items[zaehler]; //inhalt von Zeile '10.03.2010/12943'
          Vposition:= pos('/',zeile);
          datum := copy(zeile,1,Vposition-1);
          delete (zeile,1,Vposition);
          anzahl:= strtoint(zeile);
        end;
    end;
end;
Bitte um Hilfe :)

Luckie 10. Mär 2010 20:12

Re: Daten aus Listbox in Array speichern.
 
Zitat:

Zitat von Muddy
aber leider kommt es dabei ständig zu einem Problem :)

Ist ja interessant. Verräts du uns auch zu welchem?

Und eine kurze Erläuterung zu den Variablen und deinem Code wäre auch nicht schlecht. So kann man nur raten, was du versuchst zu tun.

Muddy 10. Mär 2010 20:24

Re: Daten aus Listbox in Array speichern.
 
Zur weiteren Erklärung :)
Ich weiß nicht wo das Problemm genau liegt. Aber der Programmablauf verläuft folgender maßen:
ACh ja Die Variable 'Verkehr' ist ein dynamisches array mit einem record Datentyp
Delphi-Quellcode:

{In der Listbox befinden sich ein Daten(Datum) und ein zahlenwert getrennt durch ein '/'
und ich möchte diese beiden getrennt in ein array speichern.}

{1. Inhalt der erstel Zeile von der Listbox wird in zeile reingeschreiben
 2.Jetzt wird das in die variable datum die Strings von der ersten bis zur position von
 '/' reingeschrieben
 3.Hier wird in der zeile das Datum mit dem '/' gelöscht sodass nurnoch eine Zahl drinsteht}

procedure TForm1.EIntrgeListboxinAraybernehmen1Click(Sender: TObject);
var Vposition:integer;
    zeile: String;
begin
  while zaehler <> listbox1.Count-1 do
    begin
      with Verkehr[zaehler] do
        begin
          zeile:=listbox1.Items[zaehler]; //1.
         
          Vposition:= pos('/',zeile);    
          datum := copy(zeile,1,Vposition-1);//2.
          delete (zeile,1,Vposition); //3.
         
          anzahl:= strtoint(zeile);
        end;
    end;
end;

markus5766h 10. Mär 2010 20:24

Re: Daten aus Listbox in Array speichern.
 
Hallo,

fehlt da nicht ein
Delphi-Quellcode:
var
  zaehler : Integer;
und am Ende der Prozedur

Delphi-Quellcode:
inc(zaehler) // oder dec(zaehler)
??

Muddy 10. Mär 2010 20:27

Re: Daten aus Listbox in Array speichern.
 
Ja das stimmt, aber er Merkert ja schon bei der löschen procedure

Luckie 10. Mär 2010 20:29

Re: Daten aus Listbox in Array speichern.
 
Zitat:

Zitat von Muddy
Ich weiß nicht wo das Problemm genau liegt.

Aber du weißt, dass der Code ein Problem verursacht? Dann beschreibe uns doch einfach mal das Problem. Kommt eine Fehlermeldung? Macht der Code nicht das, was er soll? Lass dir doch bitte nicht alles aus der Nase ziehen.
Zitat:

Zitat von Muddy
Ja das stimmt, aber er Merkert ja schon bei der löschen procedure

Die Fehlermeldung kennt mein Delphi nicht. Es kann doch nicht so schwer sein, die genaue Fehlermeldung zu nennen.

Jens Hartmann 10. Mär 2010 20:31

Re: Daten aus Listbox in Array speichern.
 
Er müsste eigendlich früher meckern, weil die Var. "Zaehler" gar nicht erst bekannt ist.

Gruß Jens

Luckie 10. Mär 2010 20:34

Re: Daten aus Listbox in Array speichern.
 
Könnte global sein. Des Wegen will ich ja mehr Infos.

Jens Hartmann 10. Mär 2010 20:35

Re: Daten aus Listbox in Array speichern.
 
Wäre aber global etwas seltsam. Oder?

Gruß Jens

Muddy 10. Mär 2010 20:36

Re: Daten aus Listbox in Array speichern.
 
Also sobald die Procedure bei der ausführung des Programms starte, dann kommt ein sobald er in die delete-procedure reingeht. BIn schon mehrfach mit dem Debugger durch und finde das problem einfach nicht..

Und der zaehler ist global deklariert ^^

Jens Hartmann 10. Mär 2010 20:37

Re: Daten aus Listbox in Array speichern.
 
Was schreibt er denn für eine Exception

Luckie 10. Mär 2010 20:39

Re: Daten aus Listbox in Array speichern.
 
Zitat:

Zitat von Muddy
Also sobald die Procedure bei der ausführung des Programms starte, dann kommt ein sobald er in die delete-procedure reingeht.

WAS kommt da? Meine Güte das kann doch nicht so schwer sein.

Muddy 10. Mär 2010 20:45

Re: Daten aus Listbox in Array speichern.
 
Also Jens wenn das hier gemeint ist dann bittesehr:

Zitat:

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00402A59 in module'Profect1.exe'. Write of adress 00000000'. Process stopped.

Luckie 10. Mär 2010 20:47

Re: Daten aus Listbox in Array speichern.
 
Das sieht auf als wenn du auf nicht reservierten Speicher zu greifst.

Was ist denn Verkehr für ein Typ? Ein Objekt? Ein Record?

Muddy 10. Mär 2010 20:48

Re: Daten aus Listbox in Array speichern.
 
Ein dynamisches Reccordarray. Weil ich es für unterschiedlich viele Eintäge nutzen will :)

Jens Hartmann 10. Mär 2010 20:57

Re: Daten aus Listbox in Array speichern.
 
So viel wie ich weiß, musst Du dann auch eine Var. von deinem Record erstellen.

in etwa so...

Delphi-Quellcode:
var
  MeinVerkehr : TVerkehr;
Gruß Jens

Luckie 10. Mär 2010 20:59

Re: Daten aus Listbox in Array speichern.
 
Nimm erst mal das komische with aus dem Quellcode. Dann kann man auch was erkennen.

Muddy 10. Mär 2010 21:00

Re: Daten aus Listbox in Array speichern.
 
Habe ich schon.. alles Global schon passier -.-'

Deshalb die variable Verkehr!!

Delphi-Quellcode:
type TRVerkehr = record
      Datum:string[10];
      anzahl:integer;
end;

type TVerkehr = array of TRVerkehr;

var Verkehr: TVerkehr;

{$R *.dfm}

procedure TForm1.DateiinListboxeinlesen1Click(Sender: TObject);
begin
if not OpenDialog1.Execute then exit;
  listbox1.Items.LoadFromFile(OpenDialog1.FileName);
end;

procedure TForm1.EIntrgeListboxinAraybernehmen1Click(Sender: TObject);
var Vposition:integer;
    zeile,buffer: String;
begin
  while zaehler <> listbox1.Count-1 do
    begin
      with Verkehr[zaehler] do
        begin
          zeile:=listbox1.Items[zaehler];
         
          Vposition:= pos('/',zeile);
          datum := copy(zeile,1,Vposition-1);
          delete (zeile,1,Vposition);
         
          anzahl:= strtoint(zeile);
          inc(zaehler);
        end;
    end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  zaehler:=0;
end;

Luckie 10. Mär 2010 21:02

Re: Daten aus Listbox in Array speichern.
 
Dann mach das mal lokal. Warum muss das global sein. Oder zeig uns doch mal den globalen Code, der noch zu dem Code dazu gehört.

Jens Hartmann 10. Mär 2010 21:02

Re: Daten aus Listbox in Array speichern.
 
Also sind Zeile und Anzahl Inhalte des Records Verkehr...

Luckie 10. Mär 2010 21:06

Re: Daten aus Listbox in Array speichern.
 
Das hat so keinen Zweck. Wir raten hier nur rum.

Helmi 10. Mär 2010 21:11

Re: Daten aus Listbox in Array speichern.
 
Wo wird eigentlich die Größe des Arrays gesetzt?

Ich vermisse ein SetLength

Jens Hartmann 10. Mär 2010 21:13

Re: Daten aus Listbox in Array speichern.
 
Also, irgendwie alles ein bißchen seltsam,

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  zaehler:=0;
end;
Die Deklaration von Zaehler finde ich nicht, gut vieleicht übersehen. Aber wenn Du Zahler auf 0 setzen tust, im OnShow, was passiert den mit Zaehler nach der Funktion. Vieleicht solltest Du das erstmal so umbauen...

Delphi-Quellcode:
  for I := 0 to Listbox1.Count - 1 do
    begin
      ..
Dann i als Lokal deklariert...

Gruß Jens

DeddyH 11. Mär 2010 08:18

Re: Daten aus Listbox in Array speichern.
 
Zitat:

Delphi-Quellcode:
while zaehler <> listbox1.Count-1 do

Wieso <> ? Was, wenn zaehler durch einen blöden Fehler plötzlich größer ist als die Anzahl der Listbox-Einträge? Dass da außerdem ein SetLength fehlt, hat Helmi ja bereits gesagt.

himitsu 11. Mär 2010 09:25

Re: Daten aus Listbox in Array speichern.
 
Zitat:

Zitat von DeddyH
Wieso <> ? Was, wenn zaehler durch einen blöden Fehler plötzlich größer ist als die Anzahl der Listbox-Einträge?

Dafür benötigt es nichtmal einen "blöden" Fehler.
zaehler = 0 (bei Programmstart und nach FormShow)
ListBox1 ist leer, demnach
ListBox1.Count-1 = -1

und schwups knallt es :)

Delphi-Quellcode:
while zaehler <= listbox1.Count-1 do
// oder
while zaehler < listbox1.Count do
Außerdem, wozu eine globale Variable, für eine lokale Schleife?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 Uhr.

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