Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit const (https://www.delphipraxis.net/10927-problem-mit-const.html)

sharkx 28. Okt 2003 09:12


Problem mit const
 
Hallo,

In meiner function habe ich eine const nach der ich eine Text Datei durchsuche. Nun möchte ich aber das ich diese Const in den Optionen ( TIniFile ) festlegen kann. Und da habe ich auch ein Problem ...


Delphi-Quellcode:
function ReadString(path: string): string;
const
  searchstring = '[MP3] + New Release:';
var
  z1: string;
  i, p1, p2: integer;
  //  searchstring: string;
begin
  // searchstring := sTag + ' + ' + sString;
So wie es jetzt geschrieben ist funktioniert es mit fester Angabe der Const. Das was ich rauskommentiert habe, sollte eigentlich der Weg sein mit der Angabe der Variablen in der ini File. Die Variablen werden in der onCreate Procedur geschrieben.
Aber ...

Wenn ich nun die auskommentierte Version nutze komme ich zu einem anderen Ergebniss. Nun meine Frage:

Wie bekomme ich die beiden Variablen in die const?
Setze ich sie mit
Delphi-Quellcode:
searchstring = sTag + ' + ' + sString;
einfach rein bekomm ich einen fehler Konstantenausdruck erwartet.

Vielen Dank :)

r_kerber 28. Okt 2003 09:19

Re: Problem mit const
 
Hallo sharkx,

mit const definierst Du, wie der Name schon sagt, eine Konstante. In der OH steht hierzu:
Zitat:

Ein Konstantenparameter (const) entspricht einer lokalen bzw. schreibgeschützten Variablen. Konstantenparameter entsprechen weitgehend Wertparametern. Sie können ihnen jedoch im Rumpf einer Prozedur oder Funktion keinen Wert zuweisen und sie nicht als var-Parameter an eine andere Routine übergeben. Übergeben Sie eine Objektreferenz als Konstantenparameter, können Sie weiterhin auf die Objekteigenschaften zugreifen und diese ändern.
Also wirst du wohl eine Variable verwenden müssen.

sharkx 28. Okt 2003 09:28

Re: Problem mit const
 
hmm, wenn ich Dich nun richtig verstanden habe, müsste ich

Delphi-Quellcode:
const
    searchstring = sTag + ' + ' + sString;
nutzen, oder?

Tut es aber nicht, nur mit

Delphi-Quellcode:
const
  searchstring = '[MP3] + New Release:';
erfüllt es seinen Zweck. Jedoch _muss_ ich die Const irgendwie aus der Ini File auslesen können.

Tom 28. Okt 2003 09:33

Re: Problem mit const
 
Nein, völlig falsch verstanden: Eine Konstante ist konstant. Diese kann man zur Laufzeit nicht ändern, also mußt Du eine Variable nehmen.

sharkx 28. Okt 2003 09:40

Re: Problem mit const
 
gut, ok .. verstanden. Da bleibt mir ja nichts anderes übrig, als die Function so umzuschreiben, das ich nicht mehr die Const verwende.

Ich paste ma die Function, eventuell könnt ihr mir bissel unter die Arme greifen :)

Delphi-Quellcode:
function ReadString(path: string): string;
const
  searchstring = '[MP3] + New Release:';
var
  z1: string;
  i, p1, p2: integer;
begin
  list := TStringList.Create;
  newlist := TStringList.Create;
  list.LoadFromFile(path);
  // Release parsen
  for i := 0 to list.Count - 1 do
  begin
    p1 := Pos(searchstring, list[i]);
    if p1 = 0 then continue;
    z1 := list.Strings[i];
    p1 := Pos(TFirst, z1);
    p2 := Pos(TLast, z1);                
    datum := Copy(z1, p1 + 1,(p2 - p1) - 1);
    p1 := Pos(searchstring, z1);
    z1 := Copy(z1, p1 + length(searchstring) + 1,length(z1));
    p2 := Pos(' ', z1);
    Release := Copy(z1, 1,p2 - 1);
    if not DupeInListView(datum + ' ' + Release, Form1.ListView2) then
      newlist.Add(datum + ' ' + Release)
  end;
  Result := newlist.CommaText;
  // List Freigeben
  list.Free;
  // NewList Freigeben
  newlist.Free;
end;
Wenn ich das Ganze nun ändere in ...

Delphi-Quellcode:
function ReadString(path: string): string;
var
  z1: string;
  i, p1, p2: integer;
  searchstring: string;
begin
  searchstring := sTag + ' + ' + sString;
  list := TStringList.Create;
  newlist := TStringList.Create;
  list.LoadFromFile(path);
  // Release parsen
  for i := 0 to list.Count - 1 do
  begin
    p1 := Pos(searchstring, list[i]);
    if p1 = 0 then continue;
    z1 := list.Strings[i];
    p1 := Pos(TFirst, z1);
    p2 := Pos(TLast, z1);                
    datum := Copy(z1, p1 + 1,(p2 - p1) - 1);
    p1 := Pos(searchstring, z1);
    z1 := Copy(z1, p1 + length(searchstring) + 1,length(z1));
    p2 := Pos(' ', z1);
    Release := Copy(z1, 1,p2 - 1);
    if not DupeInListView(datum + ' ' + Release, Form1.ListView2) then
      newlist.Add(datum + ' ' + Release)
  end;
  Result := newlist.CommaText;
  // List Freigeben
  list.Free;
  // NewList Freigeben
  newlist.Free;
end;
bekomm ich ein anderes Ergebniss als wenn ich es mit Konstanten mache. Ich mag zwar nun nicht den Sinn verstehen warum dies so ist, aber seht ihr ne Möglichkeit es ohne konstanten zu machen?

Bin dankbar für jede Antwort, jede Erklärung und jede zeile Code :)

Tom 28. Okt 2003 09:49

Re: Problem mit const
 
sTag und sString enthält wohl nicht das gewünschte:

1) Nutze den Debugger
2) Verwende keine globalen Variablen und übergebe die Strings einfach als Parameter der Funktion ReadString.

sharkx 28. Okt 2003 09:54

Re: Problem mit const
 
die beiden variablen sTag und sString haben den gleichen inhalt.
Siehe Ini File..
Code:
sTag=[MP3]
sString=New Release:
Den Debugger nutze ich so oft ich kann, jedoch finde ich hier nich den fehler :/

Tom 28. Okt 2003 10:00

Re: Problem mit const
 
Zitat:

Zitat von sharkx
die beiden variablen sTag und sString haben den gleichen inhalt.

Offensichtlich nicht, sonst würde es gehen.

Zitat:

Siehe Ini File..
Irrelevant.

Zitat:

Den Debugger nutze ich so oft ich kann, jedoch finde ich hier nich den fehler :/
Und was zeigt der Debugger als Inhalt von sTag und sString an?

PS: Den Satz zu Globalen Variablen/Parameterübergabe hast Du gelesen?

r_kerber 28. Okt 2003 10:03

Re: Problem mit const
 
Hallo sharkx

es wäre mal interessant zu sehen, wie die beiden Ergebnisse aussehen!

sharkx 28. Okt 2003 10:18

Re: Problem mit const
 
Tom: Hast Recht, die Variable sTag und sString sind laut debugger = ''.

Wenn ich sie nun in der function deklariere, wie les ich die nun aus der Ini file aus bzw wie übergebe ich sie weiter?

so funktioniert es nicht :/
Delphi-Quellcode:
ReadString.sTag:= Ini.ReadString('Section', 'sTag', '[MP3]');

ReadString(sTag):= Ini.ReadString('Section', 'sTag', '[MP3]');

r_kerber: Ergebniss mit Konstanten war in der ListView folgendes:
Delphi-Quellcode:
Time        Release
11:01:03     Bravo Hits
Ohne konstanten ..
Delphi-Quellcode:
Time        Release
             ^Mp3


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 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