Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fehler: Unkontrollierter Übertrag von Daten in ein Array (https://www.delphipraxis.net/164008-fehler-unkontrollierter-uebertrag-von-daten-ein-array.html)

Ykcim 25. Okt 2011 10:49

Fehler: Unkontrollierter Übertrag von Daten in ein Array
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Zusammen,

etwas amüsiert, hänge ich an einem Fehler in meiner Software fest und hoffe, dass mir jemand helfen kann. So etwas habe ich noch nicht erlebt...

In einer Function erstelle ich aus einem zweidimensionalen Array eine csv-Datei. Das klappt auch wunderbar und ist nicht die erste Function dieser Art in meiner Software.

Um zu ermitteln, wo die Datei gespeichert werden soll, wird der Pfad ermittelt, in dem die Software liegt - auch kein Problem. Witzigerweise wird aber genau in diesem Moment in die dirtte Spalte meines Arrays und immer in der Zeile "223" der Pfad abgelegt...

Ich habe zwei Screenshots mit angehängt, aus denen alles ersichtlich sein sollte...

Hier noch die ganze Function:

Delphi-Quellcode:
function SaveToCSVLiefer(var Cols: TCols; var Rows: TRows):Boolean;
var SD : TSaveDialog;
    I : Integer;
    CSV : TStrings;
    query, FileName : String;
    Pfad: string;
begin
  Pfad:=ExtractFilePath(Application.ExeName)+'Daten\';
  FileName:=Pfad+'Lieferupload.csv';
  //Stringliste erzeugen
  CSV := TStringList.Create;
  //Stringliste füllen
  For I := 0 To Length(Rows[0]) - 1 Do
    begin
          CSV.Add(Rows[0,I]+','+
      '"'+Rows[1,I]+'"'+','+
      '"'+Rows[2,I]+'"'+','+
          Rows[3,I]+','+
          Rows[4,I]+','+
      '"'+Rows[5,I]+'"'+','+
          Rows[6,I]+','+
          Rows[7,I]+','+
          Rows[8,I]+','+
          Rows[9,I]+','+
      '"'+Rows[10,I]+'"'+','+
          Rows[11,I]+','+
      '"'+Rows[12,I]+'"'+',');
    end;
  //CSV speichern
  CSV.SaveToFile(FileName);
  Result := True;
  CSV.Free;
end;

Hat jemand eine Idee?

Vielen Dank

Ykcim

DeddyH 25. Okt 2011 10:56

AW: Fehler: Unkontrollierter Übertrag von Daten in ein Array
 
Wieso sind das eigentlich Var-Parameter? Und Deine Schleife verstehe ich nicht, wenn ich ehrlich bin.

Ykcim 25. Okt 2011 11:07

AW: Fehler: Unkontrollierter Übertrag von Daten in ein Array
 
HalloDeddyH,

vielen Dank für Deine Antwort.

Was meinst Du mit VAR-Parametern? Das sind Variablen, die deklariert werden...:?:
In der Schleife wird aus dem zweidimensionalen Array eine TStringList befüllt, aus welche ich dann als CSV-Datei abspeichere.

Der Witz ist, dass der Fehler passiert, bevor eigentlich irgendetwas mit der TStringList oder dem Array gemacht wird...

Ich habe die Anweisung zur Ermittlung des Pfads jetzt unterhalb der Schleife positioniert, da wo er auch gebraucht wird. (Ich mag es lieber, wenn ich Pfade zu ANfang einer Function ermittel), dann bleibt der Fehler aus. Jedenfalls wirkt er sich nicht mehr so stark aus, denn jetzt wird das "Feld" 223 in der "zweiten Spalte" leer und nicht mit dem Pfad bestückt. Vorher stand in dem Feld eine Information, die mir dadurch verloren geht, aber ich bekomme bei meinem loadinfile (kommt in der nächsten Procedure) keinen Fehler mehr...

Warum wird an dieser Stelle mein Array verändert???

Vielen Dank

Ykcim

DeddyH 25. Okt 2011 11:22

AW: Fehler: Unkontrollierter Übertrag von Daten in ein Array
 
Du übergibst durch die Var-Deklaration Deine Arrays by Reference. Laut Code ist das aber unnötig, da Du die Originalwerte ja nicht innerhalb der Routine ändern willst. Du könntest einmal das Var durch Const ersetzen, das erscheint mir sinnvoller. Und wie sind TCols bzw. TRows deklariert? Irgendwie habe ich das Gefühl, dass Deine Indizes nicht stimmen.

ConnorMcLeod 25. Okt 2011 11:23

AW: Fehler: Unkontrollierter Übertrag von Daten in ein Array
 
Zitat:

Zitat von Ykcim (Beitrag 1132407)
Delphi-Quellcode:
function SaveToCSVLiefer(var Cols: TCols; var Rows: TRows):Boolean;
var SD : TSaveDialog;
    I : Integer;
    CSV : TStrings;
    query, FileName : String;
    Pfad: string;
begin
  Pfad:=ExtractFilePath(Application.ExeName)+'Daten\';
  FileName:=Pfad+'Lieferupload.csv';
  //Stringliste erzeugen
  CSV := TStringList.Create;

Vielleicht mal die TStringList als TStringList deklarieren ?

yörsch 25. Okt 2011 11:41

AW: Fehler: Unkontrollierter Übertrag von Daten in ein Array
 
Moin
Ich kenn solche Fehler auch, in dem Delphi was in Speicherstellen reinschreibt, was da nicht hingehört...

Dies ist sie Stelle wo das entstandene Problem nach oben poppt...
nicht der eigendliche auslöser...

Möglich, ist das ein früherer Fehler in deinem Programm (ohne eine Exception zu werfen) zu diesem komischen Verhalten führt.
oder es ein speicherverwaltungs problem in Delphi ist ....

Hmm...:gruebel:
Wenn der Wert OK ist, direkt befor es in die Procedure geht, spricht einiges dafür das Delphi daran beteiligt ist...
Ich hab das verhalten bei einigen Dynamischen Array´s beobachtet... und mir dardurch geholfen , Objekte anstant Datentypen oder Record´s zuverwenden.

p80286 25. Okt 2011 11:46

AW: Fehler: Unkontrollierter Übertrag von Daten in ein Array
 
Zitat:

Zitat von Ykcim (Beitrag 1132413)
Vorher stand in dem Feld eine Information, die mir dadurch verloren geht, aber ich bekomme bei meinem loadinfile (kommt in der nächsten Procedure) keinen Fehler mehr...

Warum wird an dieser Stelle mein Array verändert???

zum Teufel welches Array? oder verbirgt sich hinter Trows und TCols ein Array??????
und wenn sich Variablen gegenseitig überschreiben, dann sind meist Pointer (dyn.arrays) beteiligt, die in die Botanik zeigen.
Jetzt solltest Du z.B. die Bereichsprüfung und Konsorten aktivieren. Ich wette da ist irgendetwas faul.

Gruß
K-H

blauweiss 25. Okt 2011 11:54

AW: Fehler: Unkontrollierter Übertrag von Daten in ein Array
 
Außerdem wird das übergebene "Cols" innerhalb Deiner Routine gar nicht verwendet.... :roll:

Gruß
blauweiss

messie 25. Okt 2011 12:04

AW: Fehler: Unkontrollierter Übertrag von Daten in ein Array
 
Zitat:

Zitat von blauweiss (Beitrag 1132425)
Außerdem wird das übergebene "Cols" innerhalb Deiner Routine gar nicht verwendet.... :roll:

Und ich bin gerade darüber gestolpert, dass Length mit pointerindizierten arrays Späne machen kann. Steht Dir kein Member wie Rows.Count zur Verfügung?

Grüße, Messie

DeddyH 25. Okt 2011 12:13

AW: Fehler: Unkontrollierter Übertrag von Daten in ein Array
 
So wie ich das verstehe ist Rows ein 2-dimensionales Array in der Art [Zeile, Spalte]. Wenn dem so ist, dann ist die Schleife definitiv falsch, da ja damit "diagonal" gelesen wird. IMO müsste das stattdessen ungefähr so aussehen:
Delphi-Quellcode:
for i := Low(Rows) to High(Rows) do
  begin
    s := '';
    for j := Low(Rows[i]) to High(Rows[i]) do
      //String zusammensetzen
      s := s + Rows[i, j] + ',';
    Stringliste.Add(s);
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:32 Uhr.
Seite 1 von 3  1 23      

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