Odczyt wartości z plików .ini

dział ogólny

Odczyt wartości z plików .ini

Nowy postprzez Geding » sobota, 20 grudnia 2008, 12:44

Zacząłem pisać program który musi zapiamiętywać dane z comboboxa i zawartość paru zmiennych, problem w tym że nie moge odczytać wartości które udaje mi się zapisać.
Tak wygląda zapis (który działa wartości są poprawnie zapisane)
Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{

Form2->ShowModal();
      ComboBox1->Items->Add(nowi[i].c_str());     // dodanie do comboboxa

AnsiString nazwaPliku = ExtractFilePath( Application->ExeName ) + "Ustawienia.ini";

TIniFile *Ini = new TIniFile(nazwaPliku);
Ini->WriteInteger("Uzytkownicy", "ilu", i);
Ini->WriteString("Uzytkownicy", " user"+IntToStr(i), nowi[i].c_str());
i++;
delete Ini;
}


A tak odczyt i tu już nie moge odczytać wartości
Kod: Zaznacz cały
void __fastcall TForm1::FormShow(TObject *Sender)
{
AnsiString nazwaPliku = ExtractFilePath( Application->ExeName ) + "Ustawienia.ini";
// odczyt comboboxa z pliku ini
TIniFile *Ini = new TIniFile("Ustawienia.ini");
  i=Ini->ReadInteger("Uzytkownicy", "ilu", 1) ;
     Label3->Caption=i ;            //sprawdzenie ile wynosi i (bÅ‚Ä…d, zawsze pokazuje zero)
for (i;i>0;i--)
{
Label3->Caption=i;
  ComboBox1->Items->Add (Ini->ReadString("Uzytkownicy", "user"+i, "error"));
}

i=1;

delete Ini;
}


i to zmienna typu integer a nowi[i] to tablica 10 elementowa typu string.
Jakieś propozycje co źle zrobiłem? :roll:
Avatar użytkownika
Geding
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): sobota, 13 grudnia 2008, 12:02
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odczyt wartości z plików .ini

Nowy postprzez Witold » sobota, 20 grudnia 2008, 16:33

Geding napisał(a):Jakieś propozycje co źle zrobiłem? :roll:


Wydaje mi się że chodzi o to: ComboBox1->Items->Add (Ini->ReadString("Uzytkownicy", "user"+i, "error"));
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Odczyt wartości z plików .ini

Nowy postprzez Geding » sobota, 20 grudnia 2008, 20:53

rzeczywiście tu powinno być ComboBox1->Items->Add (Ini->ReadString("Uzytkownicy", "user"+IntToStr(i), "error"));

Tylko nie w tym problem gdyż program nie wykonuje w ogóle pętli for gdyż podczas wejscia do pętli i wynosi zero z niewiadomych powodów, najprawdopodobniej zrobiłem coś źle przy odczycie tej zmiennej ;/.
Avatar użytkownika
Geding
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): sobota, 13 grudnia 2008, 12:02
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odczyt wartości z plików .ini

Nowy postprzez wargo » sobota, 20 grudnia 2008, 21:17

A jakiś błąd podczas kompilacji istnieje?
A na pewno ma być odejmowanie o 1?
Kod: Zaznacz cały
i--)
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Odczyt wartości z plików .ini

Nowy postprzez Geding » sobota, 20 grudnia 2008, 22:21

Brak błędów i ma być odejmowane o jeden ;p Już tłumacze:

Kod: Zaznacz cały
// Wcisniecie przycisku powoduje:
Form2->ShowModal(); //Okienko z prosba o podanie nazwy użytkownika
      ComboBox1->Items->Add(nowi[i].c_str());     // dodanie do comboboxa nazwy usera

AnsiString nazwaPliku = ExtractFilePath( Application->ExeName ) + "Ustawienia.ini";

TIniFile *Ini = new TIniFile(nazwaPliku);
Ini->WriteInteger("Uzytkownicy", "ilu", i); // zapis ilu jest użytkowników
Ini->WriteString("Uzytkownicy", " user"+IntToStr(i), nowi[i].c_str()); // zapis nazwy użytkownika
i++;   //zwiÄ™kszenie iloÅ›ci użytkowników o jeden
delete Ini;


I teraz jak pobiore do i wartośc określająca ilość użytkowników wiem ile razy się ma wykonać pętla mógłbym równie dobrze ją zmienić tak
Kod: Zaznacz cały
for (l=1;l==i;l++)
Avatar użytkownika
Geding
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): sobota, 13 grudnia 2008, 12:02
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odczyt wartości z plików .ini

Nowy postprzez Witold » niedziela, 21 grudnia 2008, 01:37

Geding napisał(a):Tylko nie w tym problem gdyż program nie wykonuje w ogóle pętli for gdyż podczas wejscia do pętli i wynosi zero z niewiadomych powodów, najprawdopodobniej zrobiłem coś źle przy odczycie tej zmiennej ;/.


Zmieniłem na:
Kod: Zaznacz cały
  TIniFile *Ini = new TIniFile(nazwaPliku);  // z TIniFile *Ini = new TIniFile("Ustawienia.ini");

stworzyłem testowy plik "Ustawienia.ini" i u mnie wczytywanie przebiega bez problemu.
Wklej może zawartość swojego pliku "Ustawienia.ini", tak będzie łatwiej testować.
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Odczyt wartości z plików .ini

Nowy postprzez Cyfrowy Baron » niedziela, 21 grudnia 2008, 11:32

void __fastcall TForm1::FormShow(TObject *Sender)
{
AnsiString nazwaPliku = ExtractFilePath( Application->ExeName ) + "Ustawienia.ini";
// odczyt comboboxa z pliku ini
TIniFile *Ini = new TIniFile("Ustawienia.ini");

i = Ini->ReadInteger("Uzytkownicy", "ilu", 1) ;

Label3->Caption = i ; //sprawdzenie ile wynosi i (błąd, zawsze pokazuje zero)

for (i;i>0;i--)
{
Label3->Caption=i;
ComboBox1->Items->Add (Ini->ReadString("Uzytkownicy", "user"+i, "error"));
}

i = 1;

delete Ini;
}




Pierwszy błąd:
AnsiString nazwaPliku = ExtractFilePath( Application->ExeName ) + "Ustawienia.ini";
// odczyt comboboxa z pliku ini
TIniFile *Ini = new TIniFile("Ustawienia.ini");

Program nie odnajduje pliku "Ustawienia.ini", więc wczytuje wartość domyślną, w tym przypadku równą 1.

powinno być:
Kod: Zaznacz cały
  AnsiString nazwaPliku = ExtractFilePath( Application->ExeName ) + "Ustawienia.ini";
  // odczyt comboboxa z pliku ini
  TIniFile *Ini = new TIniFile(nazwaPliku);




Drugi błąd:
ComboBox1->Items->Add (Ini->ReadString("Uzytkownicy", "user"+i, "error"));

Nie można tak dodawać wartości typu integer do wartości typu AnsiString.
Poza tym zapisujesz te wartości do pliku ini tak:
Ini->WriteString("Uzytkownicy", " user"+IntToStr(i), nowi[i].c_str());

zauważ, że przed słowem user umieściłeś spację: " user", a odczytujesz z takiej nazwy: "user", czyli brak spacji. Przy zapisie do pliku ini zalecam usuwać spację przed nazwą wartości, czyli powinieneś zapisywać dane do pliku tak:

Kod: Zaznacz cały
Ini->WriteString("Uzytkownicy", "user" + IntToStr(i),  nowi[i].c_str());


i odczytywać tak:

Kod: Zaznacz cały
ComboBox1->Items->Add (Ini->ReadString("Uzytkownicy",  "user" + IntToStr(i), "error"));




Zwracaj uwagę na szczegóły, a unikniesz problemów.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Odczyt wartości z plików .ini

Nowy postprzez Geding » niedziela, 21 grudnia 2008, 13:34

Dzięki za pomoc, w końcu działa.
Cóż mogę powiedzieć ;p na przyszłość będę starał się zwracać uwagę na takie szczegóły.
Avatar użytkownika
Geding
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): sobota, 13 grudnia 2008, 12:02
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odczyt wartości z plików .ini

Nowy postprzez wargo » niedziela, 21 grudnia 2008, 20:15

Cyfrowy Baron jest bardzo spostrzegawczy :D
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 43 gości

cron