Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bestimmte Stellen aus String List lesen (https://www.delphipraxis.net/15585-bestimmte-stellen-aus-string-list-lesen.html)

PhöniX 31. Jan 2004 20:57


Bestimmte Stellen aus String List lesen
 
Hi,
ich weiß nicht ob das hierher passt, aber egal..

Ich hab ne .ini datei gemacht und will aus ihr bestimmte stellen auslesen. das sieht so aus:
Code:
ja
yes

nein
no

gut
good
wie krieg ich jetzt hin, dass einer der ersten wörter (ja,nein,gut) ausgelesen wird und dann der dazugehörige zweite..??
wobei der erste immer zufällig sein soll...

hboy 31. Jan 2004 21:26

Re: Bestimmte Stellen aus String List lesen
 
wenn du dich an die Formatierung hältst kannst du das so machen

Delphi-Quellcode:
type TEintrag = record // der typ besteht aus 2 strings
  englisch,
  deutsch: string[255];
end;

var
  F: Textfile;                
  a: string[255];
  liste: Array of TEintrag;

procedure readinifile(dateiname: string);
begin
  assignfile(F, dateiname);  // Datei zuweisen
  reset(F);                        // und mit Lesezugriff öffnen
  while not EOF(F) do              // solange die Leseposition nicht am Ende der Datei angekommen ist lesen
  begin
    readln(F,a);                     // leerzeile lesen
    setlength(liste, length(liste) +1 ); // neues Element an die Liste anfügen
    readln(F,a);                     // wieder eine Zeile lesen, den deutschen Teil
    liste[high(liste)].deutsch := a;// und das Wort in die Array "liste" rein
    readln(F,a);                     // wieder eine Zeile lesen, den englischen Teil
    liste[high(liste)].englisch := a;// und diesen entsprechend in die andere Variable des Records aus dem letzten Element speichern
  end;
  closefile(F);                    // zum Schluss die Datei schliessen
                                    // jetzt befinden sich in der Array soviele Datensätze wie Wortpaare, jeweils deutsch und englisch
end;

function getrandomitem: TEintrag;
begin
  if length(liste) <>0 then        // wenn die Liste nicht leer ist
  Result := liste[round(high(liste)* random)]; // irgendeinen Datensatz auswählen
end;


// Beispiel
procedure TForm1.FormCreate(Sender: TObject);
begin
  readinifile('datei.ini'); // initialisieren
end;


procedure TForm11.Button1Click(Sender: TObject);
var
  puffer: TEintrag;
begin
  puffer :=getrandomitem;           // und so kommt man dann an die Datensätze ran
  Label1.Caption := puffer.deutsch;
  label2.Caption := puffer.englisch;
end;
Edit: Kommentare
Edit: dateiname durch variable ersetzt

PhöniX 31. Jan 2004 21:41

Re: Bestimmte Stellen aus String List lesen
 
was brauch ich denn davon und was nicht?? :gruebel:

ich will sowas machen:
Delphi-Quellcode:
label1.caption := //eine zufällige erste zeile der string list;
...
if edit1.text = //die dazugehörige untere zeile
then
...
kannst du mir mal den code posten und an die stelle der kommentare das einfügen, was da hin gehört??
und das übrige auch :wink: aber an die stellen, an die du z.b. datei.ini schreibst, schreib einfach nen kommentar was da hingehört...das wär dann :thuimb: :thuimb: :thuimb:

hboy 31. Jan 2004 22:00

Re: Bestimmte Stellen aus String List lesen
 
hoff es is jetzt klarer :roll:

DP-Maintenance 31. Jan 2004 22:11

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Datenbanken" nach "Sonstige Fragen zu Delphi" verschoben.

PhöniX 31. Jan 2004 22:36

Re: Bestimmte Stellen aus String List lesen
 
ja...habs mal ausprobiert..
aber ich krieg noch nen exeption fehler:
Delphi-Quellcode:
procedure readinifile(dateiname: string);
begin
  assignfile(F, 'd-e.ini');
  reset(F);
  while not EOF(F) do
  begin
    readln(a);//<--------------Hier liegt der Fehler
    setlength(liste, length(liste) +1 );
    readln(a);
    liste[high(liste)].deutsch := a;
    readln(a);
    liste[high(liste)].englisch := a;
  end;
  closefile(F);

end;
[edit] Fehler: EInOutError [/edit]

hboy 31. Jan 2004 22:56

Re: Bestimmte Stellen aus String List lesen
 
Delphi-Quellcode:
procedure readinifile(dateiname: string);
begin
  assignfile(F, dateiname);
  reset(F);
  while not EOF(F) do
  begin
  try
    setlength(liste, length(liste) +1 );
    readln(F,a);
    readln(F,a);
    liste[high(liste)].deutsch := a;
    readln(F,a);
    liste[high(liste)].englisch := a;
  except
    setlength(liste, length(liste) -1 );
  end;
  end;
  closefile(F);

end;
[edit=thomasdrewermann]Delphi-Tags ergänzt Mfg, thomasdrewermann[/edit]

PhöniX 31. Jan 2004 23:01

Re: Bestimmte Stellen aus String List lesen
 
wenn ich mit exceptions mache, immer noch der gleicher fehler..
wenn ich ohne mache, läd er 5 sekunden und dann is nichts mehr...
hier mal der ganze code:
Delphi-Quellcode:
unit main_u;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids, Menus, Buttons, ExtCtrls, TeeProcs, TeEngine, Chart,
  ImgList, DXDraws;

type
  TMain = class(TForm)
    NutzerEingabe: TEdit;
    version: TLabel;
    VKCoach: TLabel;
    MainMenu: TMainMenu;
    Datei: TMenuItem;
    BeendenMenu: TMenuItem;
    voka: TLabel;
    ausgabelabel: TLabel;
    eingabelabel: TLabel;
    OK: TBitBtn;
    YesOrNo: TImage;
    TextRight: TLabel;
    antwort: TLabel;
    answer: TLabel;
    Beenden: TBitBtn;
    art: TLabel;
    Info: TMenuItem;
    Auswertung: TButton;
    procedure BeendenMenuClick(Sender: TObject);
    procedure BeendenClick(Sender: TObject);
    procedure OKClick(Sender: TObject);
    procedure InfoClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure AuswertungClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type TEintrag = record
  englisch,
  deutsch: string[255];
end;

var
  Main: TMain;
  F: textfile;
  a: string[255];
  liste: Array of TEintrag;
  Gesamt: Integer;
  Richtig: Integer;
  Falsch: Integer;

implementation

{$R *.DFM}
procedure readinifile(dateiname: string);
begin
assignfile(F, dateiname);
reset(F);
while not EOF(F) do
begin
try
setlength(liste, length(liste) +1 );
readln(a);
readln(a);
liste[high(liste)].deutsch := a;
readln(a);
liste[high(liste)].englisch := a;
except
setlength(liste, length(liste) -1 );
end;
end;
closefile(F);


end;

function getrandomitem: TEintrag;
begin
  if length(liste) <>0 then
  Result := liste[round(high(liste)* random)];
end;
//END!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
procedure TMain.BeendenMenuClick(Sender: TObject);
begin
 Close;
end;

procedure TMain.BeendenClick(Sender: TObject);
begin
 Close;
end;


procedure TMain.OKClick(Sender: TObject);
var
 puffer: TEintrag;
begin
 if ansilowercase(NutzerEingabe.Text) = puffer.englisch then
  begin
   TextRight.Caption := 'Richtig';
   YesOrNo.Picture.LoadFromFile('Graphics/yes.bmp');
   NutzerEingabe.SetFocus;
   puffer :=getrandomitem;
   readinifile('d-e.ini');
   voka.Caption := puffer.deutsch;
   Auswertung.Enabled := True;
   Gesamt := Gesamt + 1;
   Richtig := Richtig + 1;
  end
 else
  begin
   TextRight.Caption := 'Falsch';
   YesOrNo.Picture.LoadFromFile('Graphics/no.bmp');
   answer.Visible := true;
   antwort.Caption := puffer.englisch;
   NutzerEingabe.SetFocus;
   puffer :=getrandomitem;
   readinifile('d-e.ini');
   voka.Caption := puffer.deutsch;
   Auswertung.Enabled := True;
   Gesamt := Gesamt + 1;
   Falsch := Falsch + 1;
  end;
end;

procedure TMain.InfoClick(Sender: TObject);
begin
 Info.Visible := True;
end;

procedure TMain.FormCreate(Sender: TObject);
var
 puffer: TEintrag;
begin
 puffer :=getrandomitem;
  readinifile('d-e.ini');
  voka.Caption := puffer.deutsch;
  Gesamt := 0;
  Richtig := 0;
  Falsch := 0;
end;

procedure TMain.AuswertungClick(Sender: TObject);
var
 Ergebnis: Integer;
begin
 Ergebnis := Gesamt div Richtig * 100;
   TextRight.Caption := IntToStr(Ergebnis) + '% richtig';
   YesOrNo.Visible := False;
   answer.Visible := False;
   antwort.Visible := False;
end;

end.
Vielleicht hilft das.. :spin:

[edit]Fataler Fehler: Ausgabedatei:'F:\Dokumente und Einstellungen\...\vkcoach.exe' kann nicht erstellt werden[/edit]

hboy 31. Jan 2004 23:40

Re: Bestimmte Stellen aus String List lesen
 
procedure TMain.OKClick(Sender: TObject);
var
puffer: TEintrag;
begin
if ansilowercase(NutzerEingabe.Text) = puffer.englisch // <--- ist zu dem Zeitpunkt ''
then
begin
TextRight.Caption := 'Richtig';
YesOrNo.Picture.LoadFromFile('Graphics/yes.bmp');
NutzerEingabe.SetFocus;
[...]
ojee.... du solltest den Puffer oben zu den globalen Variablen dazutun weil der in der Prozedur am anfang leer ist.

hboy 31. Jan 2004 23:42

Re: Bestimmte Stellen aus String List lesen
 
und wenn du das Programm aus dem Explorer raus startest, also ohne Debugger dann dürfte da keine Fehlermeldung kommen


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 Uhr.
Seite 1 von 4  1 23     Letzte »    

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