Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Versions abfrage Problem! (https://www.delphipraxis.net/148455-versions-abfrage-problem.html)

danu1104 2. Mär 2010 07:38


Versions abfrage Problem!
 
Guten Morgen liebe DP Freunde :)


Ich habe ein kleines problem und zwar:
versuche ich hiermit die version abzufragen, es funktioniert soweit auch aber da mein program nach höhere werte schaut glaubt er das 43 jetzt höere version ist als die eigentliche version
das wiederum verursacht ganz klar einen error (erste ist version, zweite anzahl der archive/downloads)

Delphi-Quellcode:
36.01.11 43


Delphi-Quellcode:
var InfFile:TExtFile;
    Inf : String;
    Ini : Tinifile;
    RInf : TStringlist;
    I  : Integer;
begin
  assignfile(InfFile,'history.config');
   ReseT(InfFile);
   Read(InfFile,inf);
  CloseFile(InfFile);

  label1.Caption:=inf;
  Localver:=inf;

  ini:=Tinifile.Create(ExtractFilePath(ParamStr(0))+'update.ini');
  with ini do
   begin
     H:=ReadString('Launcher','Host','');
     D:=ReadString('Launcher','Path','');
     P:=ReadInteger('Launcher','Port',0);
   end;
  ini.Free;

  with HTT do
   begin
     Port:=P;
   end;

  RInf:=TStringlist.Create;
  RInf.Delimiter:=' ';
 try
  RInf.DelimitedText:= htt.Get(H+'/'+D+'/history.config');
 except
  MessageBox(0,'Error while loading version Information','Error',16);
  exit;
 end;
 for i:=0 to RInf.Count -1 do
 begin
  if not (RInf.Strings[i] <> Localver ) then
  begin

   Remotever:=RInf.Strings[i];
   label2.Caption:=RInf.Strings[i];
   try
    updateIt(Remotever,StrToInt(RInf.Strings[i+1]));
    finally
    assignfile(InfFile,'history.config');
     ReWrite(infFile);
     Write(InfFile,RInf.Strings[i]);
    CloseFile(InfFile);

   end;
    break;
  end;
 end;
end;
meine frage jetzt, wie kann ich aus der version 36.01.11 die punkte rausnehmen um sie dann so zu vergleichen?

mw19 2. Mär 2010 07:48

Re: Versions abfrage Problem!
 
Hallo,

wenn du zum Beispiel in TEdit hast und in diesem deine Versionsnummer steht, kannst du mit
Delphi-Quellcode:
Edit1.Text := StringReplace(Edit1.Text,'.','',[rfReplaceAll, rfIgnoreCase]);
die Punkte aus der Versionsnummer entfernen.

Gruß,
Michael

danu1104 2. Mär 2010 08:11

Re: Versions abfrage Problem!
 
Danke, hat mir jedoch nicht wirklich geholfen.

damit ich wirklich nur die version bekomme und nix anderes habe ich die if abfrage etwas angepasst.

Delphi-Quellcode:
 if not(RInf.Strings[i] = Localver ) and (length(RInf.Strings[i]) = 8) then
falls jedoch noch jemand anderes eine bessere idee hat wie ich das am besten handeln kann, wer ich klar
sehr dankbar darüber :-)

Luckie 2. Mär 2010 08:37

Re: Versions abfrage Problem!
 
Delphi-Quellcode:
assignfile(InfFile,'history.config');
Ich glaube, wir sagen in jedem Thread, dass man immer den Pfad mit angeben soll. Und so langsam sollte sich das eigentlich rumgesprochen haben. :?

himitsu 2. Mär 2010 09:16

Re: Versions abfrage Problem!
 
Zitat:

Zitat von danu1104
glaubt er das 43 jetzt höere version ist als die eigentliche version

Wo wird in diesem Code etwas auf höher/nieddriger (größer/kleiner) geprüft/verglichen?

Ich seh kein <, <=, >= oder > in diesem Code.

nur ein <> und das vergleicht nicht auf höher.
Delphi-Quellcode:
if not (RInf.Strings[i] <> Localver ) then
PS

not <> entspricht =
Delphi-Quellcode:
if RInf.Strings[i] = Localver then

danu1104 2. Mär 2010 09:32

Re: Versions abfrage Problem!
 
habe so ziemlich alles ausgetestet

<>
<
>

und zu guter letzt = was ja auch läuft mit der längen abfrage:-)

Zitat:

Zitat von Luckie
Delphi-Quellcode:
assignfile(InfFile,'history.config');
Ich glaube, wir sagen in jedem Thread, dass man immer den Pfad mit angeben soll. Und so langsam sollte sich das eigentlich rumgesprochen haben. :?

Weiss ich, ich nehme dann immer ExtractFilePath(ParamStr(0)) , habs aber diesmal aus bequemlichkeit rausgelassen^^

Aber bisher hat sich da noch nix beschwert ^^

khh 2. Mär 2010 09:36

Re: Versions abfrage Problem!
 
Zitat:

Zitat von danu1104
habe so ziemlich alles ausgetestet

<>
<
>

das sagt doch aus, dass du gar nicht weisst was <>, >,< überhaupt bewirkt,oder ?

danu1104 2. Mär 2010 09:43

Re: Versions abfrage Problem!
 
sicher.

<> "Ist nicht gleich als" heisst das.
grösser als >
kleiner als <


Back to Topic ->

Ich habe alles ausprobiert es liegt aber nicht an der eigentlichen versions abfrage sondern:

Da es sich in einer schleife befindet ist doch ganz klar das er mir nach dem 1. update folgendes als 2. angebliche version liefert "43".

So ich habe es jetzt einfach durch einer weiteren frage behoben und wolte nur noch wissen ob ihr evtl einen besseren weg habt oder kennt.

DeddyH 2. Mär 2010 09:53

Re: Versions abfrage Problem!
 
Was ist denn nun noch das Problem? Das habe ich irgendwie nicht ganz verstanden.

himitsu 2. Mär 2010 09:53

Re: Versions abfrage Problem!
 
Ein Tipp:

Stringvergleiche <> Integervergleiche

bei Integer
12 > 3

bei String,
"12" < "3"

da dort jedes Zeichen einzeln und nacheinander verglichen wird und
"1" < "3"

nat 2. Mär 2010 10:07

Re: Versions abfrage Problem!
 
warum machst du das überhaupt in einer schleife, wenn doch klar definiert ist an welcher stelle
was steht? RInf[0] ist dann deine version (die noch geparst werden muß) und RInf[1] deine anzahl
oder was auch immer.

danu1104 2. Mär 2010 10:13

Re: Versions abfrage Problem!
 
Zitat:

Zitat von nat
warum machst du das überhaupt in einer schleife, wenn doch klar definiert ist an welcher stelle
was steht? RInf[0] ist dann deine version (die noch geparst werden muß) und RInf[1] deine anzahl
oder was auch immer.

kann ich dir sagen wieso:

Auf dem webserver ist eine history.config und beim program ist eine.
Die auf dem Server beinhaltet mehrere versionen:

Server history.config
Delphi-Quellcode:
36.01.11 43
36.01.12 6
36.02.13 1
Client history.config (steht immer nur die zuletzt geladene version drin ohne datei anzahl)
Delphi-Quellcode:
36.01.10


so, und er soll eine nach dem anderen beziehen, dass heisst nach dem 36.01.11 update lädt er das update für 36.01.12.

DeddyH 2. Mär 2010 10:15

Re: Versions abfrage Problem!
 
Ich habe jetzt nicht alles in allen Details nachvollzogen, aber die Versionen sollten ja dann in den geraden Zeilen der Stringliste stehen, oder täusche ich mich?

danu1104 2. Mär 2010 10:20

Re: Versions abfrage Problem!
 
genau.

Und diese liste wird von oben nach unten abgearbeitet, die versionsnummer ist gleichzeitig ein ordner auf dem webserver wo er sich die Rinf.Strings[i+1] (43 datein) runterlädt.

das klappt auch. mit

Delphi-Quellcode:
if not(RInf.Strings[i] = Localver ) and (length(RInf.Strings[i]) = 8) then
ich könnte es dynamicher machen indem ich etwas ändere

Delphi-Quellcode:
if not(RInf.Strings[i] = Localver ) and (length(RInf.Strings[i]) > 8) then
aber an für sich hätte ich keine idee diese history config anders auszulesen, deswegen frage ich ja ob ihr es wisst ^^

DeddyH 2. Mär 2010 10:25

Re: Versions abfrage Problem!
 
Machst Du das innerhalb der for-Schleife? Falls ja, dann könntest Du auch so versuchen:
Delphi-Quellcode:
for i := 0 to RInf.Count -1 do
  if not Odd(i) then
    //gerade Zeilennummer
    ...

nat 2. Mär 2010 10:55

Re: Versions abfrage Problem!
 
also entweder macht du das wie über mit schon beschrieben mit einer weiche für grade/ungrade zeilen
oder du lässt das mit DelimitedText weg, gehst zeile für zeile durch und parst jede einzelne zeile
(was ich persönlich viel übersichtlicher finde).
so in die richtung:
Delphi-Quellcode:
RInf.Text:= htt.Get(H+'/'+D+'/history.config');
for i:=0 to RInf.Count - 1 do
begin
  if ParseLine(RInf[i], VersionsInfo) do
  begin
    //versions check hier
  end;
end;
ParseLine(...) wär dann ne eigene function die du dir selber schreiben mußt.

-Phantom- 2. Mär 2010 12:44

Re: Versions abfrage Problem!
 
[edit] falsch verstanden

danu1104 3. Mär 2010 06:11

Re: Versions abfrage Problem!
 
Hallo, ich habe soweit alles geklärt, nun habe ich einen weiteren fehler und ich kann ihn nicht erkennen, evtl ist es noch zu früh ^^

wenn i bei 100 ist gibt es ein fehler ... da es keine datei 0.0100 gibt sondern 0.100
aber ich dachte ich hätte es abgefangen.

Meine Theorie:
if i > 9 then und if i > 99 then stimmt net ganz?

Delphi-Quellcode:
     if i < 10 then
     begin
      Label2.Caption:=RemoteVer+'/0.00'+IntToStr(i);
      download(H+'/'+D+'/'+vers+'/'+'0.00'+IntToStr(i)) end else
     if i > 9 then
     begin
      Label2.Caption:=RemoteVer+'/0.0'+IntToStr(i);
      download(H+'/'+D+'/'+vers+'/'+'0.0'+IntToStr(i)) end else
     if i > 99 then
     begin
      Label2.Caption:=RemoteVer+'/0.'+IntToStr(i);
      download(H+'/'+D+'/'+vers+'/'+'0.'+IntToStr(i)) end

hoika 3. Mär 2010 06:19

Re: Versions abfrage Problem!
 
Halo,

und bei 1000 fängst du wieder an ?

Also ich habe das so gemacht.

Die einzelnen Nummern per Explode (oder StringList->Delimiter)
auslesen.

Auf ganze 100er (OK, 1000 kann ich auch nicht ;)) umgemodelt

0 -> 000
1 -> 001

Den String wieder zusammengebaut

1.2.3.4 -> 001.002.003.004
1.2.3.14 -> 001.002.003.014

und normal per String-Vergleich < oder > vergleichen


Heiko

danu1104 3. Mär 2010 06:22

Re: Versions abfrage Problem!
 
Danke dir :D

ich habs so gelöst
Delphi-Quellcode:
if (i > 9) and (i < 100) then
Ihr seit echt klasse und schnell super weiter so ;-)

generic 3. Mär 2010 08:24

Re: Versions abfrage Problem!
 
Zitat:

Zitat von danu1104
Delphi-Quellcode:
     if i < 10 then
     begin
      Label2.Caption:=RemoteVer+'/0.00'+IntToStr(i);
      download(H+'/'+D+'/'+vers+'/'+'0.00'+IntToStr(i)) end else
     if i > 9 then
     begin
      Label2.Caption:=RemoteVer+'/0.0'+IntToStr(i);
      download(H+'/'+D+'/'+vers+'/'+'0.0'+IntToStr(i)) end else
     if i > 99 then
     begin
      Label2.Caption:=RemoteVer+'/0.'+IntToStr(i);
      download(H+'/'+D+'/'+vers+'/'+'0.'+IntToStr(i)) end

Das nennt man Code Duplizierung und ist schlecht.
Kennt ihr den Format Befehl nicht?
Damit können die 3 Ifs auf 0 zusammen kürzen.


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