Gelöst: Einlesen von Ini- Dateien

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
petermännchen
Beiträge: 92
Registriert: So 26. Aug 2007, 20:35
OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
CPU-Target: 32Bit
Wohnort: Helmstedt
Kontaktdaten:

Gelöst: Einlesen von Ini- Dateien

Beitrag von petermännchen »

Guten Morgen,

es geht hier nicht um Umlaute!

Ich habe eine Ini- Datei für Bundesländer. Aufbau unauffällig:
[Deutschland]
1=Baden-Würtemberg
2=Bayern
3=Berlin
4=Brandenburg
5=Bremen
6=Hamburg
7=Hessen
8=Mecklenburg-Vorpommern
9=Niedersachsen
10=Nordrhein-Westfalen
11=Rheinland-Pfalz
12=Saarland
13=Sachsen
14=Sachsen-Anhalt
15=Schleswig-Holstein
16=Thüringen
17=
[Österreich]
a=---
0=Österreich
b=---
c=
[Schweiz]
A=---
0=Schweiz
b=---
c=


Beim Einlesen in eine Listbox kommt folgendes heraus:
Bild

füge ich einen Dummy davor klappt es:
[leer]
0=jjjj
[Deutschland]
.
.

Bild

Was mache ich hier denn falsch? (Unter D2010 klappt das wie gewohnt)

Hier der Quelltext:

Code: Alles auswählen

case tag of
  // Bundesland für Region auswählen
  1,7 : begin
        sl := TStringlist.create;
        sl2 := TStringlist.create;
        ini := TInifile.create(extractfiledir(Paramstr(0)) + '\Bundesland.ini');
        ini.readsections(sl);
        while sl.count > 0 do
        begin
          showmessage(sl[0]);
          ini.readsectionvalues(sl[0],sl2);
          while sl2.count > 0 do
          begin
            Listbox1.Items.add(copy(sl2[0],pos('=',sl2[0])+1,255));
            sl2.delete(0);
          end;
          sl.delete(0);
        end;
        ini.free;
      end;


Danke euch und Gruß

Peter
Zuletzt geändert von petermännchen am So 1. Jan 2012, 11:17, insgesamt 3-mal geändert.
Zeiterfassung, einfach gerechter!

petermännchen
Beiträge: 92
Registriert: So 26. Aug 2007, 20:35
OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
CPU-Target: 32Bit
Wohnort: Helmstedt
Kontaktdaten:

Re: Einlesen von Ini- Dateien

Beitrag von petermännchen »

Nachtrag:
Bild
Zeiterfassung, einfach gerechter!

petermännchen
Beiträge: 92
Registriert: So 26. Aug 2007, 20:35
OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
CPU-Target: 32Bit
Wohnort: Helmstedt
Kontaktdaten:

Re: Einlesen von Ini- Dateien

Beitrag von petermännchen »

Noch ein Nachtrag:

Eine Leerzeile am Anfang der Ini- Datei bringt ebenfalls den gewünschten Erfolg.
Mich macht das aber nicht besonders glücklich.

Gruß

Peter
Zeiterfassung, einfach gerechter!

Benutzeravatar
theo
Beiträge: 8581
Registriert: Mo 11. Sep 2006, 19:01

Re: Einlesen von Ini- Dateien

Beitrag von theo »

FPC 2.2.4 wurde am April 12, 2009 released.
Ich würde einfach mal ein etwas neueres Lazarus+FPC System installieren.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Einlesen von Ini- Dateien

Beitrag von Scotty »

Das klingt nach BOM. Wenn dem so ist, kannst du entweder die Datei mit einem geeigneten Editor neu speichern oder den Header entfernen.

Code: Alles auswählen

procedure RemoveBOMFromFile(aFileName:string);
const UTF8BOM:string=#$EF#$BB#$BF;
var Content:string;
begin
  if FileExistsUTF8(aFileName) then
  with TFileStream.Create(UTF8ToSys(aFileName),fmOpenReadWrite) do
  try
    if Size>3 then
    begin
      SetLength(Content,Size);
      Read(Content[1],Size);
      if Copy(Content,1,3)=UTF8BOM then
      begin
        Delete(Content,1,3);
        Seek(0,soBeginning);
        Write(Content[1],length(Content));
      end;
      SetLength(Content,0);
    end;
  finally
    Free;
  end;
end;

petermännchen
Beiträge: 92
Registriert: So 26. Aug 2007, 20:35
OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
CPU-Target: 32Bit
Wohnort: Helmstedt
Kontaktdaten:

Re: Einlesen von Ini- Dateien

Beitrag von petermännchen »

Hallo Scotty,

das war's! Vielen Dank!

Darf ich das so verwenden?

Gruß

Peter
Zeiterfassung, einfach gerechter!

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Einlesen von Ini- Dateien

Beitrag von Scotty »

petermännchen hat geschrieben:Darf ich das so verwenden?
Gern. Ich habe meinen Code unter der GPL als Open Source veröffentlicht.

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Einlesen von Ini- Dateien

Beitrag von Teekeks »

Was spricht eig. gegen die Klasse TIniFile aus der Unit IniFiles ?

petermännchen
Beiträge: 92
Registriert: So 26. Aug 2007, 20:35
OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
CPU-Target: 32Bit
Wohnort: Helmstedt
Kontaktdaten:

Re: Einlesen von Ini- Dateien

Beitrag von petermännchen »

Teekeks hat geschrieben:Was spricht eig. gegen die Klasse TIniFile aus der Unit IniFiles ?


Was meinst du? Ich hab diese ja verwendet.
Meiner Meinung nach spricht nichts dagegen. Eher alles dafür, es sei denn du möchtest die Zugriffe auf die enthaltenen Informationen verhindern.

Im genannten Beispiel ist die Ini- Datei Grundlage für die Auswahl eine Bundeslandes.
Änderungen können so von jedem selbst eingepflegt werden. Bei Bundesländern vielleicht nicht so häufig, bei Feiertage schon deutlich mehr, bei Krankenkassen vermutlich jährlich.

Gruß

Peter
Zeiterfassung, einfach gerechter!

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Gelöst: Einlesen von Ini- Dateien

Beitrag von Teekeks »

Ohh, jetzt sehe ich es auch!

Das eine ist ja TIniFile und nicht TFileStream oder so :)
Dann will ich (fast) nichts gesagt haben.

carli
Beiträge: 656
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Einlesen von Ini- Dateien

Beitrag von carli »

Scotty hat geschrieben:
petermännchen hat geschrieben:Darf ich das so verwenden?
Gern. Ich habe meinen Code unter der GPL als Open Source veröffentlicht.


Du widersprichst dich. Wer seinen Code als GPL veröffentlicht, erlaubt eben nicht, dass man ihn "einfach" so verwendet, sondern dann muss das restliche Projekt ebenfalls unter der GPL-Lizenz (oder einer Kompatiblen) stehen.

Antworten