przerabianie if/else

0

Witam wszystkich, to znów ja z ta swoją procedurką.

procedure TfGlowna.bNextClick(Sender: TObject);
var
  iniFile: TIniFile;

begin
  iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'words.ini');

  slowo0 := iniFile.ReadString('Polish_Words', 'word0', 'error');
  slowo1 := iniFile.ReadString('Polish_Words', 'word1', 'error');
  slowo2 := iniFile.ReadString('Polish_Words', 'word2', 'error');
  slowo3 := iniFile.ReadString('Polish_Words', 'word3', 'error');
  slowo4 := iniFile.ReadString('Polish_Words', 'word4', 'error');
  slowo5 := iniFile.ReadString('Polish_Words', 'word5', 'error');
  slowo6 := iniFile.ReadString('Polish_Words', 'word6', 'error');

  if ePolishWord.Text = slowo0 then
  begin
    ePolishWord.Text := slowo1;
  end
  else
    ePolishWord.Text := slowo0;
  end;

mimo kilku odpowiedzi nie poradziłem z nią sobie, przypomne tylko, że chce sprawdzić jaka zmienna (slowo0, slowo1...) jest aktualnie wyswietlona w TEdit (ePolishWord.Text ) Jedna osoba zaproponowala cos na zasadzie tablicy, petli i w niej zawartej instrukcji if, ale nie wiem jak to zrobic ! Blagam o pomoc ;-(

0

hmm, chyba nie bardzo rozumie co chcesz uzyskać.. jeśli taki zamiar jak teraz to przecież masz napisane .. - możesz to rozjaśnić o co chodzi ?

btw : dobra juz doszedłem

var
  slowo: array[0..6] of string;
  i: Integer;
begin
  // otwarcie INI
  for i := 0 to 6 do
    slowo[i] := iniFile.ReadString('Polish_Words', 'word' +IntToStr(i), 'error');
  // zamknięcie INI 
 for i := 0 to 5 do
   if ePolishWord.Text = slowo[i] then ePolishWord.Text := slowo[i +1]
end;

Chyba o to chodziło (patrząc na nazwę Sendera)

0

dzieki ,ale gdy naciskam na ten przycisk to pokazuje mi error (czyli domyslna wartosc)

procedure TfGlowna.bNextClick(Sender: TObject);
var
  iniFile: TIniFile;
  slowo: array[0..6] of string;
  i: Integer;
begin
  iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'words.ini');

  slowo0 := iniFile.ReadString('Polish_Words', 'word0', 'error');
  slowo1 := iniFile.ReadString('Polish_Words', 'word1', 'error');
  slowo2 := iniFile.ReadString('Polish_Words', 'word2', 'error');
  slowo3 := iniFile.ReadString('Polish_Words', 'word3', 'error');
  slowo4 := iniFile.ReadString('Polish_Words', 'word4', 'error');
  slowo5 := iniFile.ReadString('Polish_Words', 'word5', 'error');
  slowo6 := iniFile.ReadString('Polish_Words', 'word6', 'error');

 // otwarcie INI

 for i := 0 to 6 do
  slowo[i] := iniFile.ReadString('Polish_Words', 'word' +IntToStr(i), 'error');
 // zamknięcie INI

for i := 0 to 5 do
  if ePolishWord.Text = slowo[i] then ePolishWord.Text := slowo[i +1]
end;

zrobilem to tak, moze byc zle ???

0

A sprawdź czy masz w \Windows plik words.ini? :-D
Przed odczytaniem musisz zapisac te wartosci do pliku.

0

no w sumie nie masz racji (chyba (-: ) bo linia

 iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'words.ini');

przecież wskazuje na to iż katalog docelowy pliku .exe ma być katologiem gdzie pliok words.ini
No ale thx, czekam dalej

0

sprobuj tego

iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+ '\\words.ini');
0

to tez nic nie daje
pomocy ;-(

0
procedure TfGlowna.bNextClick(Sender: TObject);
var
  iniFile: TIniFile;
  slowo: array[0..6] of string;
  i: Integer;
begin
  iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'words.ini');

  slowo[0] := iniFile.ReadString('Polish_Words', 'word0', 'error'); //tu nie bylo nawiasow
  slowo[1] := iniFile.ReadString('Polish_Words', 'word1', 'error');
  slowo[2] := iniFile.ReadString('Polish_Words', 'word2', 'error');
  slowo[3] := iniFile.ReadString('Polish_Words', 'word3', 'error');
  slowo[4] := iniFile.ReadString('Polish_Words', 'word4', 'error');
  slowo[5] := iniFile.ReadString('Polish_Words', 'word5', 'error');
  slowo[6] := iniFile.ReadString('Polish_Words', 'word6', 'error');

 // otwarcie INI

 for i := 0 to 6 do
  slowo[i] := iniFile.ReadString('Polish_Words', 'word' +IntToStr(i), 'error');
 // zamknięcie INI

for i := 0 to 5 do
  if ePolishWord.Text = slowo[i] then ePolishWord.Text := slowo[i +1]
end;

Zapomniales o nawiasach :)

0

to tez nie pomaga, ale thx
Co ru moze byc zle ?!?
Zamieszczam caly kod tym razem moze w nim cos jest nie tak

unit kod_formy_glownej;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls, StdCtrls, ComCtrls;

type
  TfGlowna = class(TForm)
    menu: TMainMenu;
    Opcje1: TMenuItem;
    est1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    Panel1: TPanel;
    bTest: TButton;
    bEditWords: TButton;
    bExit: TButton;
    lNapisTytulowy0: TLabel;
    lNapisTytulowy1: TLabel;
    Panel2: TPanel;
    ePolishWord: TEdit;
    eEnglishWord: TEdit;
    bNext: TButton;
    Label1: TLabel;
    Label2: TLabel;
    GroupBoxScore: TGroupBox;
    lGoodAnswers: TLabel;
    lBadAnswer: TLabel;
    lScoreGood: TLabel;
    lScoreBad: TLabel;
    Exit2: TMenuItem;
    Options1: TMenuItem;
    bEndTest: TButton;
    bCheck: TButton;
    procedure bExitClick(Sender: TObject);
    procedure bEditWordsClick(Sender: TObject);
    procedure bTestClick(Sender: TObject);
    procedure Exit2Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure bCheckClick(Sender: TObject);
    procedure bNextClick(Sender: TObject);
    procedure bEndTestClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fGlowna: TfGlowna;
  liczbaDobrych: Integer;
  liczbaZlych: Integer;
  slowo0: String;
  slowo1: String;
  slowo2: String;
  slowo3: String;
  slowo4: String;
  slowo5: String;
  slowo6: String;

implementation

{$R *.dfm}

uses
kod_formy_Edit_words,kod_formy_options, Math, IniFiles, StrUtils;

procedure TfGlowna.bExitClick(Sender: TObject);
begin
  Close;
end;

procedure TfGlowna.bEditWordsClick(Sender: TObject);
begin
  fEditWords.ShowModal;
end;

procedure TfGlowna.bTestClick(Sender: TObject);
var
  iniFile: TIniFile;
begin
  iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'words.ini');
  bEditWords.Enabled := False;
  ePolishWord.Text := iniFile.ReadString('Polish_Words', 'word0', 'error');
  bEndTest.Enabled := True;
end;

procedure TfGlowna.Exit2Click(Sender: TObject);
begin
  close;
end;

procedure TfGlowna.N1Click(Sender: TObject);
begin
  fEditWords.ShowModal;
end;

procedure TfGlowna.FormCreate(Sender: TObject);
begin
bEndTest.Enabled := False
end;

procedure TfGlowna.bCheckClick(Sender: TObject);
var
  iniFile: TIniFile;

begin
  iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'words.ini');

  slowo0 := iniFile.ReadString('English_Words', 'word0', 'error');
  slowo1 := iniFile.ReadString('English_Words', 'word1', 'error');
  slowo2 := iniFile.ReadString('English_Words', 'word2', 'error');
  slowo3 := iniFile.ReadString('English_Words', 'word3', 'error');
  slowo4 := iniFile.ReadString('English_Words', 'word4', 'error');
  slowo5 := iniFile.ReadString('English_Words', 'word5', 'error');
  slowo6 := iniFile.ReadString('English_Words', 'word6', 'error');


  if eEnglishWord.Text = '' then
  begin
  ShowMessage('You must write the answer!');
  end;

  if eEnglishWord.Text = slowo0 then
  begin
    liczbaDobrych := liczbaDobrych + 1;
    lScoreGood.Caption := IntToStr(liczbaDobrych);
  end
  else
    liczbaZlych :=  liczbaZlych + 1;
    lScoreBad.Caption := IntToStr(liczbaZlych);
end;

procedure TfGlowna.bNextClick(Sender: TObject);
var
 iniFile: TIniFile;
 slowo: array[0..6] of string;
 i: Integer;
begin
 iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'words.ini');

 slowo[0] := iniFile.ReadString('Polish_Words', 'word0', 'error'); //tu nie bylo nawiasow

 slowo[1] := iniFile.ReadString('Polish_Words', 'word1', 'eSDror');
 slowo[2] := iniFile.ReadString('Polish_Words', 'word2', 'eAAArror');
 slowo[3] := iniFile.ReadString('Polish_Words', 'word3', 'error');
 slowo[4] := iniFile.ReadString('Polish_Words', 'word4', 'error');
 slowo[5] := iniFile.ReadString('Polish_Words', 'word5', 'error');
 slowo[6] := iniFile.ReadString('Polish_Words', 'word6', 'error');

// otwarcie INI


for i := 0 to 6 do
 slowo[i] := iniFile.ReadString('Polish_Words', 'word' +IntToStr(i), 'error');
// zamknięcie INI


for i := 0 to 5 do
 if ePolishWord.Text = slowo[i] then ePolishWord.Text := slowo[i +1]
end;


procedure TfGlowna.bEndTestClick(Sender: TObject);
begin
bEditWords.Enabled := True;
end;

end.


0

Niech mi ktos pomorze
please ;-(

0

Słuchaj - tak to nie dojdziesz do niczego .. sprawdzaj sobie po kolei wszystko - czy jest wszystko okej - jeśli tak to jedziesz dalej..

Czyli:

INI := TINIFile.Create...
i sprawdzasz ścieżke, czy to aby na pewno ta,

Później odczytujesz - i znowu sprawdzasz...

Zapewniam Cię, że szybko znajdziesz błąd..

0

Niech mi ktos pomorze
please ;-(

Ja jestem z Pomorza - o co chodzi?

0

sorry za ortografa :d

robilem tak jak mowiles,ale to nic nie dalo, nawet usunal wszystkie procedury i zostawilem tylko ta zeby sprawdzic czy ona jst winna, ale wyglada na to ze tak.
Mysle, ze jest cos nie tak z ta 1 petla forToDo:

procedure TfGlowna.bNextClick(Sender: TObject);
var
 iniFile: TIniFile;
 slowa: array[0..6] of string;
 i: Integer;
begin
 iniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'words.ini');


// otwarcie INI


for i := 0 to 6 do
 slowa[i] := iniFile.ReadString('Polish_Words', 'word' +IntToStr(i), 'error1');
// zamknięcie INI


for i := 0 to 5 do
 if ePolishWord.Text = slowa[i] then ePolishWord.Text := slowa[i +1]
end;

Juz sam nie wiem co mam robic [stuk]

a, jeszcze zapomnialem dodac, ze program zwraca mi ciagle wartosc domyslna zmiennej slowa[0], nawet nie przechodzi do nastepnego, gdy wpisze przy nim zamiast error np. aaa, to pokazuje mi aaa 8-0

0

help

0

W jaki sposób aplikacja ma Cię poinformować, które to słowo?
Ma wyswietlić komunikat?

0

for i := 0 to 5 do
if ePolishWord.Text = slowa[i] then ePolishWord.Text := slowa[i +1]
end;

To jest bez sensu
Jak już to:

var slowo: string;
...

  test := '';
  for i := 0 to 5 do 
     if ePolishWord.Text = slowa[i] then test := slowa[i];

 

Po wykonaniu pętli jeśli zmienna test będzie pusta
to znaczy, że słowa nie znaleziono.

0

: ) no comments : )

Niechce mi sie tego czytac, ale na pierwszy rzut oka nie zamykasz nigdzie pliku INI : ) a na drugi zapamietaj sobie ze ExtractFileDir nia ma na koncu ukosnika i przez to moze byc smieszna nazwa tego pliku ini : )

1° iniFile.Free

2° ExtractFilePath(Application.ExeName)+ '\words.ini';

( bo inaczej gdy chcesz mieć c:\test\words.ini bedziesz mial c:\testwords.ini : )

0

2° ExtractFilePath(Application.ExeName)+ '\words.ini';

ExtractFilePath ma ukosnik na koncu ;)

Ja tam nie wiem co ten program ma robic, jak zastepowac slowa to zrob se plik o strukturze

slowo1|word1
slowo2|word2

wczytaj do StringList, w petli podzielaj stringa, sprawdzaj pierwszego, jak pasuje to go zamien, jaka filozofia?

0

ExtractFilePath ma ukosnik na koncu ;)

Oczywiście przepraszam moj błąd wydawało mi sie że napisałem ExtractFileDir : ) Tak to jest jak sie korzysta z Code Completion : )

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