Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ini Datei - Zeile2, 4 Stelle auslesen (https://www.delphipraxis.net/147827-ini-datei-zeile2-4-stelle-auslesen.html)

Chakvour 17. Feb 2010 02:45


Ini Datei - Zeile2, 4 Stelle auslesen
 
Hallo,

ist es irgendwie möglich wie im Topic beschrieben eine bestimmte Stelle in der Ini auszulesen?
Ich weiss bis jetzt nur wie man die Eigenschaften und Werte ausliesst.
Doch eine Zeile ist komplett eingetragen wovon ich haber nur die 4 Stelle benötige.

Beispiel

[Section]
Eigenschaft0=Wert0
Eigenschaft1=Du hast dir 234 Punkte verdient!
Eigenschaft2=Wert2

Wie gesagt, es soll also die 234 ausgelesen werden.
So das Problem ist eigentlich das es ja nicht immer eine 234 ist.

Ist sowas möglich genau die Stelle auszulesen?



Achso, so sieht das bisher aus. Dient nur als orientierung. Später kommt der Button-Klick in den einen Timer. Dort wird ein Befehl ausgeführt der Daten ausliesst und in eine Memo schreibt. Die wiederrum werden jetzt durch den Button-Klick in die ini geschrieben die ich dann später im Label ausgeben möchte.
Deswegen müsste ich wissen ob ich eine bestimmt Stelle auslesen kann.

Delphi-Quellcode:
function SaveListBoxToIni(const IniPath, Section: String;
  List: TStrings): Boolean;
var
  k: Integer;
begin
  with TIniFile.Create(IniPath) do try
      EraseSection('Details');

    for k := 0 to List.Count - 1 do
      WriteString(Section, IntToStr(k), Format('"%s"',[List[k]]));

    Result := True;
  finally Free end;
end;


procedure TForm1.Button3Click(Sender: TObject);
var i: integer;
    LineCount: integer;
    IniPath: String;
begin
IniPath := ChangeFileExt(Paramstr(0), '.ini');
if SaveListBoxToIni(IniPath, 'Details', Memo1.Lines) then
ShowMessage('Alles gespeichert!');
end;

isilive 17. Feb 2010 04:17

Re: Ini Datei - Zeile2, 4 Stelle auslesen
 
Zitat:

Zitat von Chakvour
...
[Section]
Eigenschaft0=Wert0
Eigenschaft1=Du hast dir 234 Punkte verdient!
Eigenschaft2=Wert2

Wie gesagt, es soll also die 234 ausgelesen werden.
So das Problem ist eigentlich das es ja nicht immer eine 234 ist.

Ist sowas möglich genau die Stelle auszulesen?

Warum schreibst du einen String in die .ini Datei, wenn du dir nur eine Zahl 'merken' willst?

die umständliche Variante1 "mit der Kirche ums Dorf":
Delphi-Quellcode:
Du lässt das WriteString wie es ist und
- liest ein mit ReadString
- zerlegst dann den String und holst die Zahl raus (erst copy, dann StrToInt)
die bessere Variante:
Delphi-Quellcode:
Du benutzt WriteInteger
zB: WriteInteger ('Section' , 'Punktestand' , Score);
und liest dasselbe mit ReadInteger wieder ein...

Chakvour 17. Feb 2010 05:05

Re: Ini Datei - Zeile2, 4 Stelle auslesen
 
Hmm... das sieht aber anders aus als du denkst :) Ich kann mir nicht vorstellen die Daten mit WriteInteger zu schreiben.


Solche Daten rufe ich ab.

*
Zitat:

¬Running - under¬
*¬Status: *¬ Alive - running for 261 min
*¬Current Profile: *¬ profil/profile.ini (current Level: 2)
*¬Money: *¬ 0p 0s 0c (Total: 0p 0s 0c) *¬ *¬-*¬ *¬ *¬per Hour: *¬ 0p 0s 0c
*¬Dude: *¬ 0 (424936/1523800) [0%] *¬ *¬-*¬ *¬ *¬per hour: *¬ 0 (0 h)
*¬made: *¬ 0 (0 / Hour) - Honor: 0
Diese kann ich mit einem Befehl aktualisieren über einen Chat
Danach werden sie in die Memo gelistet und dann in die ini.
Dieses passiert alle 20sekunden.


Damit ich das übersichtlicher habe, möchte ich die Werte in ein Label machen, die
sich in einer Zeile befinden. z.B die Fett gemacht sind

Ich hatte es schon probiert mit markieren und kopieren.
Dabei ist mir aber eingefallen, das die Zeilen ja mal so und mal so lang sind.
Genau Wörter könnte man löschen bzw durch nichts ersetzen. Da kommt aber in Zeile2 das Problem, da "profil/profile.ini" immer anders heisst.

Ich habe schon einiges ausprobiert, hab's mir irgendwie leichter vorgestellt :)

hoika 17. Feb 2010 06:10

Re: Ini Datei - Zeile2, 4 Stelle auslesen
 
Hallo,

leichter wird es, wenn du dir eine Funktion dazu geschrieben hast ;).

Hole dir mit einer for-Schleife die einzelnen Zeichen des Strings,
versuche daraus einen Integer zu basteln (TryStrToInt),
bis TryStrToInt fehlschlägt

am besten fängst du so an

s:= '12345a';
Ergebnis 12345 TryStrToInt schlägt dann bei 12345a fehl

dann
s:= 'a12345b'

'a' muss dann rausfallen (Delete)

Suche mal in google nach "delphi explode integer from string"
Da findest du ein paar Ansätze.


Heiko

Chakvour 17. Feb 2010 06:24

Re: Ini Datei - Zeile2, 4 Stelle auslesen
 
habs schon gelöst mit del und copy.
habe es bei der konkurrenz gefunden. da gab es ein tutorial über die stringverarbeitung

Delphi-Quellcode:
var StringList:TStringList;
    posi:integer;
    s:string;
begin
  StringList := TStringList.Create;
  try
    StringList.LoadFromFile('pfad\project1.ini');
    s:=StringList.Text;
    delete(s, 1, pos('0="Running - ', s) + length('0="Running - ') - 1);
    label2.caption := copy(s, 1, pos('"', s) - 1);

    delete(s, 1, pos('(current Level: ', s) + length('(current Level: ') - 1);
    label4.caption := copy(s, 1, pos(')"', s) - 1);
  finally
    StringList.free;
  end;
end;
Edit

Hatte jetzt zwar kleine Probleme da Werte sich ändern und diese nicht ersetzt wurden konnte.
Also habe ich dann einfach die Zeilen gelöscht.

Delphi-Quellcode:
copy(s, 1, 28);
Danke dir trotzdem nochmal für deine Hilfe


Hätte da noch ne Frage. Und zwar habe ich jetzt 5 Stück ersetzt was auch funktioniert. Allerdings wenn ich das mit 6 Stück machen will ist der letzte immer ausgeblendet, also unsichtbar. Warum ist das so?

Luckie 17. Feb 2010 09:03

Re: Ini Datei - Zeile2, 4 Stelle auslesen
 
Warum schreibst du den Text mit in die Ini? Lass den doch weg.

hoika 17. Feb 2010 09:15

Re: Ini Datei - Zeile2, 4 Stelle auslesen
 
Hallo,

nach #3 schreibt er den Text ja nicht selbst,
sondern er wird geschrieben und er will die Daten nur rausholen.


Heiko

DeddyH 17. Feb 2010 09:23

Re: Ini Datei - Zeile2, 4 Stelle auslesen
 
Aber man könnte ja bereits den Eingabestring parsen und nur die benötigten Infos in die Ini schreiben.

xZise 17. Feb 2010 09:51

Re: Ini Datei - Zeile2, 4 Stelle auslesen
 
Zitat:

Zitat von hoika
Hallo,

nach #3 schreibt er den Text ja nicht selbst,
sondern er wird geschrieben und er will die Daten nur rausholen.


Heiko

:D Doppelt hält besser? Ich denke sich irgendwo zwischen zu hängen ist schwieriger als einfach nur ein String zu parsen :D

MfG
Fabian

Chakvour 17. Feb 2010 11:56

Re: Ini Datei - Zeile2, 4 Stelle auslesen
 
Ja läuft nun alles. Nun weiss ich auch wie sowas leichtes geht :)
Naja die ini habe ich gemacht damit ich da diese 2 gänsefüsschen habe sonst wie gesagt bekomm ich hinten nicht alles ausgelesen.

Ich habe da noch eine Frage. Ich möchte deswegen nicht einen neuen Thread aufmachen.
Ich wollte gerne wenn ich den Channel joine eine Private MSG machen.
Aber irgendwie haut das alles nicht so hin.
Wie ich Nachrichten in den Channel schreibe ist mir klar, nur das mit dem PrivatenNachrichten nicht.

Delphi-Quellcode:
procedure TForm1.IdIRC1Join(ASender: TIdContext; const ANickname, AHost,
  AChannel: string);
begin
idirc1.Say('PRIVMSG', nickname.text + texttonick.text);
end;


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