Plik INI - Zczytywanie wartosci integer.

0

Witam,
Otoz mam maly problem, poniewaz chce pobierac wartosc z pliku INI.
Jak zczytuje

INI.Readstring('Main', 'Pierwszy', '')

to zczyta mi poprawnie wartosc z pliku ini bo na koncu dalem tylko ''.

Natomiast,jezeli chce czytac Integer i zrobie tak

INI.ReadInteger('Main', 'Pierwszy', '')

, to wiadom ze kloci sie typami integer ze stringem, to dodalem zamiast ''

 na koncu poprostu <code class="delphi">1

czyli wygladalo to tak

INI.ReadInteger('Main', 'Pierwszy',1);

ale wtedy zczytywalo ta wartosc 1 a nie ta co mam zapisana w pliku INI i chce ja wlasnie zczytac.

Prosze o pomoc/wskazowki.

2

INI.ReadInteger('Main', 'Pierwszy', 666)
666 to wartość która zostanie zwrócona jeżeli sekcja [main] nie zawiera wartości Pierwszy= lub zawiera nie liczbę

0

podziekowal!.

Edit...
Jednak wywala wartosc 666 ... ;/

0

może wklej łaskawie swój plik INI

0

Zawartosc pliku skyper.ini

[Main]
Pierwszy = 12345

Zczytywanie...

INI := TINIFile.Create(ExtractFilePath(ParamStr(0)) + 'skyper.ini');
    Zmienna1       := INI.ReadInteger('Main', 'Pierwszy', 666);
    finally
      INI.Free;
end;
0

bez spacji przed i po równa się

0

Nie ma roznicy.

0

a plik ini masz na 100% tam gdzie exe???

0

Ta,ten sam folder.

0
procedure TForm1.Button1Click(Sender: TObject);
var
  InI: TIniFile;
  zmienna1: string;
begin
  InI := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'skyper.ini');
  try
    Zmienna1 := IntToStr(InI.ReadInteger('Main', 'Pierwszy', 666));
  finally
    InI.Free;
  end;
end;

A czy przypadkiem nie rozchodzi się o to? ;)

0
var
  Zmienna1: Integer;
begin
  if not FileExist(ExtractFilePath(ParamStr(0)) + 'skyper.ini') then
    ShowMessage('dupa');
  INI := TINIFile.Create(ExtractFilePath(ParamStr(0)) + 'skyper.ini');
  try
    Zmienna1 := INI.ReadInteger('Main', 'Pierwszy', 666);
  finally
    INI.Free;
  end;
end;

pokaże Ci komunikat?

0

@maly^
Nie,nie chodzi mi o konwersje z intu na string bo bylo by to bez sensu;p wtedy wystarczyloby zczytac ReadString, a potrzebuje ReadInteger.
@abrakadaber
Takie podstawy to ja naprawde znam. Plik ini znajduje sie w folderze z programem i zczytuje wartosc,ale 666, zamiast tej co jet w pliku ini.

0

Musi działać albo walnąłeś się (literówka) w pliku ini albo w kodzie programu.

0

po:
Zmienna1 := INI.ReadInteger('Main', 'Pierwszy', 666);
daj:
if Zmienna1=666 then INI.WriteInteger('Main', 'Pierwszy',999)
else ShowMessage('Coś mi się pochrzaniło');

Jeżeli nie wyświetli się komunikat to obejrzyj plik.

0

Nie mogę odtworzyć problemu na Lazarusie 1.0.8 Win32. Mógłbyś podać więcej informacji co do odtworzenia problemu? Może powiedz jakie środowisko masz, i zakładając że to Delphi 7, sprawdź Lazarusem.

0

@Poczatkujacy1992 - a debugera umiesz użyć? Wrzuć zmienne do Watches i patrz instrukcja po instrukcji co zawiera; Nie ma możliwości, by plik istniał, został poprawnie otwarty, sekcja i klucz istniały a mimo wszystko wartość nie zostaje poprawnie pobrana; Coś masz w kodzie skopane, więc go zdebuguj a nie twierdź, że klasa jest aż tak zabugowana.

0

A nie zapisałeś czasem pliku INI w formacie UTF-8 z sygnaturą (BOM) wtedy Delphi twierdzi ze sekcja nie istnieje (chyba że przeniesiesz ją do 2 lub kolejnej linii pliku).

0

Już sam nie wiem, wszystko niby jest ok a wartosc zczytuje ciagle ta 666 zamiast tej poprawnej. W przypadku ReadString smiga ok,a w integer nie chce... eh
W tym zczytywaniu integer wartosc 666 chyba nie dziala, bo ciagle wlasnie mi ja wyrzuca.

Edit :

W pliku ini wyglada to nastepujaco :

[Main]
Pierwszy=9E1AE4

i wlasnie sprawdzilem ze sa tam te litery E,A,E itd... i dlatego wyrzuca wartosc 666, inaczej dziala dobrze np jakbym dal 12345... eh.
Da sie to jakos ominac?
Probowalem zrobic odczytywanie tak

StrToInt(INI.ReadString("Main", "Pierwszy", ""));

Ale wtedy wystepuja bledy z konwersja ;/

0

Przecież to jest niemożliwe musi działać jak może wszystkim działać tylko tobie nie... spakuij ten plik ini, wyślij http://wyslijto.pl/ i daj link bo chyba coś z nim nie tak.

0

@Poczatkujacy1992 - jeśli chcesz przechowywać w pliku INI liczby w systemie szesnastkowym, to poprzedź ciąg znakiem $:

[Main]
Pierwszy=$9E1AE4

Sprawdziłem u siebie na Delphi 7 i bez tego znaku metoda nie konwertuje ciągu i zawsze zwraca wartość domyślną; Nie wiem jak w nowszych Delphi, ale w wersji 7 ciąg musi być poprzedzony znakiem $ (tak samo w Lazarusie);

EDIT: Może być także z przedrostkiem 0x, czyli 0x9E1AE4 i także wczyta poprawnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1