![]() |
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:
meine frage jetzt, wie kann ich aus der version 36.01.11 die punkte rausnehmen um sie dann so zu vergleichen?
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; |
Re: Versions abfrage Problem!
Hallo,
wenn du zum Beispiel in TEdit hast und in diesem deine Versionsnummer steht, kannst du mit
Delphi-Quellcode:
die Punkte aus der Versionsnummer entfernen.
Edit1.Text := StringReplace(Edit1.Text,'.','',[rfReplaceAll, rfIgnoreCase]);
Gruß, Michael |
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:
falls jedoch noch jemand anderes eine bessere idee hat wie ich das am besten handeln kann, wer ich klar
if not(RInf.Strings[i] = Localver ) and (length(RInf.Strings[i]) = 8) then
sehr dankbar darüber :-) |
Re: Versions abfrage Problem!
Delphi-Quellcode:
Ich glaube, wir sagen in jedem Thread, dass man immer den Pfad mit angeben soll. Und so langsam sollte sich das eigentlich rumgesprochen haben. :?
assignfile(InfFile,'history.config');
|
Re: Versions abfrage Problem!
Zitat:
Ich seh kein <, <=, >= oder > in diesem Code. nur ein <> und das vergleicht nicht auf höher.
Delphi-Quellcode:
PS
if not (RInf.Strings[i] <> Localver ) then
not <> entspricht =
Delphi-Quellcode:
if RInf.Strings[i] = Localver then
|
Re: Versions abfrage Problem!
habe so ziemlich alles ausgetestet
<> < > und zu guter letzt = was ja auch läuft mit der längen abfrage:-) Zitat:
Aber bisher hat sich da noch nix beschwert ^^ |
Re: Versions abfrage Problem!
Zitat:
|
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. |
Re: Versions abfrage Problem!
Was ist denn nun noch das Problem? Das habe ich irgendwie nicht ganz verstanden.
|
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" |
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. |
Re: Versions abfrage Problem!
Zitat:
Auf dem webserver ist eine history.config und beim program ist eine. Die auf dem Server beinhaltet mehrere versionen: Server history.config
Delphi-Quellcode:
Client history.config (steht immer nur die zuletzt geladene version drin ohne datei anzahl)
36.01.11 43
36.01.12 6 36.02.13 1
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. |
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?
|
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:
ich könnte es dynamicher machen indem ich etwas ändere
if not(RInf.Strings[i] = Localver ) and (length(RInf.Strings[i]) = 8) then
Delphi-Quellcode:
aber an für sich hätte ich keine idee diese history config anders auszulesen, deswegen frage ich ja ob ihr es wisst ^^
if not(RInf.Strings[i] = Localver ) and (length(RInf.Strings[i]) > 8) then
|
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 ... |
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:
ParseLine(...) wär dann ne eigene function die du dir selber schreiben mußt.
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; |
Re: Versions abfrage Problem!
[edit] falsch verstanden
|
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 |
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 |
Re: Versions abfrage Problem!
Danke dir :D
ich habs so gelöst
Delphi-Quellcode:
Ihr seit echt klasse und schnell super weiter so ;-)
if (i > 9) and (i < 100) then
|
Re: Versions abfrage Problem!
Zitat:
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 03:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz