AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit const

Ein Thema von sharkx · begonnen am 28. Okt 2003 · letzter Beitrag vom 28. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
sharkx

Registriert seit: 24. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit const

  Alt 28. Okt 2003, 09:12
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
searchstring = sTag + ' + ' + sString; einfach rein bekomm ich einen fehler Konstantenausdruck erwartet.

Vielen Dank :)
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#2

Re: Problem mit const

  Alt 28. Okt 2003, 09:19
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.
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 24. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit const

  Alt 28. Okt 2003, 09:28
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.
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Tom

Registriert seit: 7. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: Problem mit const

  Alt 28. Okt 2003, 09:33
Nein, völlig falsch verstanden: Eine Konstante ist konstant. Diese kann man zur Laufzeit nicht ändern, also mußt Du eine Variable nehmen.
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 24. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Problem mit const

  Alt 28. Okt 2003, 09:40
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 :)
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Tom

Registriert seit: 7. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Problem mit const

  Alt 28. Okt 2003, 09:49
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.
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 24. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Problem mit const

  Alt 28. Okt 2003, 09:54
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 :/
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Tom

Registriert seit: 7. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#8

Re: Problem mit const

  Alt 28. Okt 2003, 10:00
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?
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#9

Re: Problem mit const

  Alt 28. Okt 2003, 10:03
Hallo sharkx

es wäre mal interessant zu sehen, wie die beiden Ergebnisse aussehen!
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 24. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Problem mit const

  Alt 28. Okt 2003, 10:18
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
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 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