AGB  ·  Datenschutz  ·  Impressum  







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

TIniFile und Kommentare

Ein Thema von Bernd Nowak · begonnen am 17. Apr 2007 · letzter Beitrag vom 19. Apr 2007
Antwort Antwort
Bernd Nowak

Registriert seit: 18. Jan 2006
Ort: Duisburg
61 Beiträge
 
Turbo Delphi für Win32
 
#1

TIniFile und Kommentare

  Alt 17. Apr 2007, 15:17
Heute scheint mein Frage Tag zu sein.

Habe folgendene INI Zeile:

Delphi-Quellcode:
[ Communications ]
alternate_ip_addr_lookup = 1 ; Find IP addresses another way 0 = No alternate lookup * 1 = Use alternate way
Nun wollte ich den Wert mit ReadBool('Communications','alternate_ip_addr_looku p',false) auslesen. Klappt nicht wegen dem doofen Kommentar. Gleiche wenn ich es als ReadInteger. Alles unter Vista. Ich habe es auch mal als ReadString getestet und siehe da er liest mir den Kommentar mit ein

Da ich die Kommentare nicht beeinflussen kann (also keine Diskussion ob das die richtige ini interne Syntax ist) meine Frage ob es eine einfach Möglichkeit gibt an die Werte zu kommen (ohne den String auseinander zu nehmen) ?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TIniFile und Kommentare

  Alt 17. Apr 2007, 15:24
momentan scheinst du TIniFile zu verwenden das unterstützt es von haus aus nicht.
Und eine einfache Variante ohne den String auseinander zu nehmen? Ich dachte dein Ziel ist es den String auseinander zu nehmen?! (wenn du den String nicht ändern willst kannst du logicher Weise nix abschneiden).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: TIniFile und Kommentare

  Alt 17. Apr 2007, 15:27
Nun, wäre das schlimm, wenn du den String auseinandernehmen musst?
Im Prinzip musst du doch nur mit pos() die Position des ersten Leerzeichens im String finden und dann den Rest mit delete() löschen (oder mit copy() alles davor rauskopieren). Die Funktionen sind in StrUtils.

Ohne Auseinandernehmen fällt mir nichts ein.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#4

Re: TIniFile und Kommentare

  Alt 17. Apr 2007, 15:28
Das Auseinandernehmen des Strings kannst Du abtippen aus der Unit Inifiles. ReadBool benutzt ReadInteger:
Delphi-Quellcode:
IntStr := ReadString(Section, Ident, '');
  if (Length(IntStr) > 2) and (IntStr[1] = '0') and
    ((IntStr[2] = 'X') or (IntStr[2] = 'x')) then
    IntStr := '$' + Copy(IntStr, 3, Maxint);
  Result := StrToIntDef(IntStr, Default);
Grüße, Messie
  Mit Zitat antworten Zitat
Bernd Nowak

Registriert seit: 18. Jan 2006
Ort: Duisburg
61 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: TIniFile und Kommentare

  Alt 17. Apr 2007, 15:33
Danke schonmal. Es kann sein das ich das sogar so auf meinem anderem PC gemacht habe ("m Prinzip musst du doch nur mit pos() die Position des ersten Leerzeichens im String finden und dann den Rest mit delete() löschen (oder mit copy() alles davor rauskopieren). Die Funktionen sind in StrUtils.").

Klar ich habe jetzt die Unit inifile benutzt und bin gerade darüber gestolpert Geht es mit einer anderen Unit ? Ich habe mal ein bisschen gegoogelt und es scheint an der Art und Weise zu liegen wie Winodws ( GetPrivateString ) eine Ini Datei ausliest. Das Programm (nicht von mir) scheint aber die Daten anders auszulesen, da die Kommentare so nicht stören. Und ist das Verhalten von GetPrivateString in allen Windows Versionen von WIN95-Vista gleich ?
  Mit Zitat antworten Zitat
Bernd Nowak

Registriert seit: 18. Jan 2006
Ort: Duisburg
61 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: TIniFile und Kommentare

  Alt 17. Apr 2007, 19:05
Habe es gefunden
Ich habe es so gemacht:

Delphi-Quellcode:
        j := ini.ReadString('Communications','alternate_ip_addr_lookup','-5');
        // We look for ; and use this position to strip off the rest comment
        posfound := AnsiPos(';', j);
        if posfound > 0 then SetLength(j, posfound-1);
        // We use trim to cut off blanks
        trimmed := Trim(j);
        // We use StrToIntDef to have the Integer regardless if the string is
        // a number or something else
        i := StrToIntDef(trimmed, -1);
Kann man das besser machen (Habe englische Kommentare falls ich die Quellen des Programmes veröffentliche) ?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: TIniFile und Kommentare

  Alt 19. Apr 2007, 15:26
Schreib den Kommentar einfach vor die Zeile in die INI Datei. Die TIniFile kennt Kommentare ( ; als Kennung als erstes Zeichen) und ignoriert sie ordentlich. Auch beim Schreiben lässt er sie drinne. Also einfach die Einträge vor dem Eintrag an sich kommentieren und du hast keinen Aufwand und keine Probleme...

Und grundsätzlich: INI sind alle Strings. ReadInteger liest den String und versucht ihn in einen Integer umzuwandeln. Beim Lesen kenn er keinen Typ und liest immer String. Von daher fängt INIfile niemals an irgendwas auf Gültigkeit zu prüfen oder nur passende Dinge auszulesen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:29 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