Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi kleines IO Problem (https://www.delphipraxis.net/117148-kleines-io-problem.html)

delphi_noob666 12. Jul 2008 16:27

Datenbank: Firebird • Version: 1.5 • Zugriff über: IBExpert und Delphi

kleines IO Problem
 
Hi,
ich habe ein kleines Problem und zwar lasse ich eine Liste von Vereinen aus einer Textdatei lesen, um sie dann in eine DB zu schreiben. Die Spieltage auszulesen und in eine Tabelle zu schreiben ist auch np und funktioniert (so lange die Textdatei einer strengen Struktur unterliegt) fehlerfrei. Allerdings möchte ich jetzt aus den eingelesenen Spieltagen in eine "Rank" Tabelle schreiben mit Punkten und geschossenen Toren etc. Und genau hier ist mein Problem, wenn ich die Daten in die League Tabelle schreibe scheint er die Vereine nicht zu erkennen... durch ausprobieren hab ich festgestellt, dass er die Strings nicht richtig erkennt und nicht immer in die If-Abfragen zu kommen scheint... Für Anregungen wie man den Datenaustausch optimieren könnte bin ich sehr dankbar.

Der Fehler wirkt sich so aus: das programm addiert, da es nicht immer erkennt wann die Vereine gespielt haben, nur einmal Punkte, Tore etc. korrekt.

hier der Code mit dem ich die .txt datei auslese

Delphi-Quellcode:
procedure TFormular1.ToolButton_openClick(Sender: TObject);
var
i,j,q,h,k, daycounter : Integer;
Spieltag, Spieltag1 : String;
begin
Assignfile(f1,'C...\Saison1.txt');
Reset(f1);
j:=1;
TBL_Match.Insert;
Spieltag := ('Spieltag');
 daycounter := 0;
while not EOF(f1) do  begin
readln(f1, Zeilen_String);
k:=length(Zeilen_String);
if k = 0 then else begin
if k >0 then if k < 20  then daycounter := daycounter+1 else begin
DBE_MatchID.Text := IntToStr(j);
j:=j+1;
DBE_Date.Text := Copy(Zeilen_String,1,8);
i := Pos(' ', Zeilen_String);
q := Pos (':', Zeilen_String);
DB_HTeam.Text :=Copy(Zeilen_String, i+1, (q-1)-i);
i := Pos (':', Zeilen_String);
DBE_ATeam.Text := Copy(Zeilen_String, i+2, (k-3)-(i+2));
DBE_HTeamGoals.Text := Copy(Zeilen_String, k-2, 1);
DBE_ATeamGoals.Text := Copy(Zeilen_String, k, 1);
TBL_Match.Insert;
end;
end;
end;
Navi_Match.BtnClick(nbRefresh);
Navi_Match.BtnClick(nbFirst);
Closefile(f1);

end;
Hier der Code mit dem ich dann in die andere Tabelle schreiben möchte, ich weiß alles noch recht suboptimal gelöst aber siehe mein name :)

Delphi-Quellcode:
procedure TFormular1.ToolButton6Click(Sender: TObject);
var Vereine : array of String;
hteam, ateam,hcheckteam, teama, teamb, checkteam : String;
playedhome, playedout : boolean;
r,k,q,i,v,s,u, points, numberofmatches, countergoals,goals : Integer;
  t, ateamgoals, hteamgoals: Integer;
begin
points :=0;
setLength(Vereine,18);
numberofmatches := 0;
Navi_Match.BtnClick(nbFirst);
Navi_League.BtnClick(nbFirst);
Navi_League.BtnClick(nbInsert);

    for r := 0 to 8 do begin
    Vereine[r] := TBL_Match.FieldByName('H-TEAM').AsString;
    Vereine[r+9] := TBL_Match.FieldByName('A-Team').AsString;
    DEL_Team.Text := Vereine[r];
    Navi_League.BtnClick(nbInsert);
    DEL_Team.Text := Vereine[r+9];
    Navi_League.BtnClick(nbInsert);
    Navi_Match.BtnClick(nbNext);
    end;

    s := TBL_Match.IndexFieldCount;
   
    Navi_League.BtnClick(nbFirst);

    for r := 0 to 17 do begin
    playedhome := false;
    playedout := false;
    points := 0;
    goals := 0;
    countergoals := 0;
             
     hcheckteam := TBL_League.FieldByName('TEAM').AsString;
     TBL_Match.First;
      while not TBL_Match.Eof do begin
        numberofmatches := numberofmatches +1;
        hteam := TBL_Match.FieldByName('H-TEAM').AsString;
        ateam := TBL_Match.FieldByName('A-TEAM').AsString;
        hteamgoals := TBL_Match.FieldByName('H-TEAM-GOALS').AsInteger;
        ateamgoals := TBL_Match.FieldByName('A-TEAM-GOALS').AsInteger;
           if hteam = checkteam then begin
              if hteamgoals > ateamgoals then begin
                points := points+3;
              end;
                 if hteamgoals = ateamgoals then begin
                 points := points +1;
                 end;
              playedhome := true;
           end;
             if ateam = checkteam then begin
              if ateamgoals > hteamgoals then  begin
                 points := points+3;
              end;
                 if ateamgoals = hteamgoals then begin
                  points := points +1;
                 end;
              playedout := true;
            end;
          if playedhome = true then begin
          goals := goals + hteamgoals;
          countergoals := countergoals + ateamgoals;
          playedhome := false;
          end;
          if playedout = true then begin
          goals := goals + ateamgoals;
          countergoals := countergoals + hteamgoals;
          playedout := false;
          end;
          Navi_Match.BtnClick(nbNext);
      end;
          Navi_League.BtnClick(nbEdit);
          DEL_Points.Text := IntToStr(points);
          DEL_ATeamGoals.Text := IntToStr(goals);
          DEL_ATeamCG.Text := IntToStr(countergoals);
          Navi_League.BtnClick(nbPost);          
          //TBL_League.Insert;
           Navi_League.BtnClick(nbNext);
    end;
end;
hier ein kleiner auszug aus der textdatei:
1.Spieltag

10.08.07 VfB Stuttgart : FC Schalke 04 3:1
11.08.07 FC Bayern München : F.C. Hansa Rostock 3:0
11.08.07 VfL Bochum 1848 : Werder Bremen 2:2
11.08.07 Hannover 96 : Hamburger SV 0:1
...
...
..

Hansa 12. Jul 2008 17:17

Re: kleines IO Problem
 
Zitat:

Zitat von delphi_noob666
..dass er die Strings nicht richtig erkennt und nicht immer in die If-Abfragen zu kommen scheint...

Formatiere das mal richtig (besser einrücken), dann fällt der Fehler wohl schnell auf.

Klaus01 12. Jul 2008 17:25

Re: kleines IO Problem
 
Eingerückt schaut es so aus:

Delphi-Quellcode:
procedure TFormular1.ToolButton_openClick(Sender: TObject);
var
  i,j,q,h,k, daycounter : Integer;
  Spieltag, Spieltag1 : String;
begin
  Assignfile(f1,'C...\Saison1.txt');
  Reset(f1);
  j:=1;
  TBL_Match.Insert;
  Spieltag := ('Spieltag');
  daycounter := 0;
  while not EOF(f1) do  
    begin
      readln(f1, Zeilen_String);
      k:=length(Zeilen_String);
      if k = 0 then
      else
        begin
          if ((k >0) and (k < 20)) then
            daycounter := daycounter+1 
          else
            begin
              DBE_MatchID.Text := IntToStr(j);
              j:=j+1;
              DBE_Date.Text := Copy(Zeilen_String,1,8);
              i := Pos(' ', Zeilen_String);
              q := Pos (':', Zeilen_String);
              DB_HTeam.Text :=Copy(Zeilen_String, i+1, (q-1)-i);
              i := Pos (':', Zeilen_String);
              DBE_ATeam.Text := Copy(Zeilen_String, i+2, (k-3)-(i+2));
              DBE_HTeamGoals.Text := Copy(Zeilen_String, k-2, 1);
              DBE_ATeamGoals.Text := Copy(Zeilen_String, k, 1);
              TBL_Match.Insert;
            end;
        end;
    end; // while end
  Navi_Match.BtnClick(nbRefresh);
  Navi_Match.BtnClick(nbFirst);
  Closefile(f1);

end;
Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 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