Delphi-PRAXiS

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 21: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 22: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 22: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 23:00

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

DP-Maintenance 31. Jan 2004 23:11

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

PhöniX 31. Jan 2004 23: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 23: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 1. Feb 2004 00: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 1. Feb 2004 00: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 1. Feb 2004 00: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

PhöniX 1. Feb 2004 10:08

Re: Bestimmte Stellen aus String List lesen
 
Wenn ichs ohne Debugger starte läd er 5 Sekunden und dann ist nichts mehr...
Er findet den Fehler immer noch:
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;
Vielleicht ist auch irgendwas an den Komponenten falsch... :gruebel:

Touchdown 1. Feb 2004 10:47

Re: Bestimmte Stellen aus String List lesen
 
Ich an deiner Stelle würde mal meine grauen Zellen aktivieren und mal selber eine Lösung erarbeiten.

Als kleinen Denkanstoß könntest du versuchen diese Frage zu beantworten:

Ist a <> f ? :mrgreen:

PhöniX 1. Feb 2004 10:55

Re: Bestimmte Stellen aus String List lesen
 
Natürlich ist a <> f...
Aber ich hab sowas noch nie gemacht und weiß daher auch nicht wo der FEhler liegt
(Was muss denn a immer sein)(Bei mir ist a: String[255];)

Touchdown 1. Feb 2004 11:04

Re: Bestimmte Stellen aus String List lesen
 
Wenn dir bekannt ist, daß a <> f ist, warum programmierst du dann nicht auch so.

Edit: Wenn man von programmieren überhaupt sprechen kann, wenn man simple Fehler in einem Copy-Paste Quellcode nicht erkennen kann

PhöniX 1. Feb 2004 11:06

Re: Bestimmte Stellen aus String List lesen
 
:wiejetzt: Ich hab da keine Ahnung von...Kann mir nicht einer sagen wies geht?? :wiejetzt:

hboy 1. Feb 2004 11:07

Re: Bestimmte Stellen aus String List lesen
 
ich hab den string in seiner Länge festgelegt weil sonst probleme bei der Objektorientierung auftreten, dann wenn man versucht das Objekt zu freeen. nimm halt mal sting;

PhöniX 1. Feb 2004 11:29

Re: Bestimmte Stellen aus String List lesen
 
sting?? wohin damit?

hboy 1. Feb 2004 11:47

Re: Bestimmte Stellen aus String List lesen
 
var
a,b,c: string;
[...]
procedure readinifile(dateiname: string);
begin
assignfile(F, dateiname);
reset(F);
while not EOF(F) do
begin
if not EOF(F) then readln(F,a) else abort;
if not EOF(F) then readln(F,b) else abort;
if not EOF(F) then readln(F,c) else abort;

setlength(liste, length(liste) +1 );
liste[high(liste)].deutsch := b;
liste[high(liste)].englisch := c;
end;
closefile(F);

end;

PhöniX 1. Feb 2004 11:52

Re: Bestimmte Stellen aus String List lesen
 
Delphi-Quellcode:
 a,b,c: string;
  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
if not EOF(F) then readln(a) else abort;
if not EOF(F) then readln(b) else abort;
if not EOF(F) then readln(c) else abort;
setlength(liste, length(liste) +1 );
liste[high(liste)].deutsch := b;
liste[high(liste)].englisch := c;
end;
closefile(F);
ES GEHT IMMER NOCH NICHT :!: :!: :wall: :wall: :wall:

hboy 1. Feb 2004 11:58

Re: Bestimmte Stellen aus String List lesen
 
was? gibts immer noch den Fehler beim Laden?

PhöniX 1. Feb 2004 12:04

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
if not EOF(F) then readln(a) else abort;
if not EOF(F) then readln(b) else abort;
if not EOF(F) then readln(c) else abort;
setlength(liste, length(liste) +1 );
liste[high(liste)].deutsch := b;
liste[high(liste)].englisch := c;
end;
closefile(F);
end;
end;//<- '.' erwartet aber ';' gefunden
Wenn ich Punkt hinmach ist die gesamte Unit abgeschlossen und die proceduren danach werden nicht mehr gemacht..

Touchdown 1. Feb 2004 12:11

Re: Bestimmte Stellen aus String List lesen
 
Es ist erforderlich den kompleten Pfad auf die Datei anzugeben + vollständigem Namen, vermutlich liegt dort ein Fehler.

hboy 1. Feb 2004 12:15

Re: Bestimmte Stellen aus String List lesen
 
procedure readinifile(dateiname: string);
begin
assignfile(F, dateiname);
reset(F);
while not EOF(F) do
begin
if not EOF(F) then readln(F,a) else abort;
if not EOF(F) then readln(F,b) else abort;
if not EOF(F) then readln(F,c) else abort;
setlength(liste, length(liste) +1 );
liste[high(liste)].deutsch := b;
liste[high(liste)].englisch := c;
end;
closefile(F);
end;


achja

readinifile(ExtractFilePath(Application.Exename)+' d-e.ini'); wenns im selben Verzeichnis is

PhöniX 1. Feb 2004 12:33

Re: Bestimmte Stellen aus String List lesen
 
Zitat:

readinifile(ExtractFilePath(Application.Exename)+' d-e.ini'); wenns im selben Verzeichnis is
wohin damit??

blawen 1. Feb 2004 14:30

Re: Bestimmte Stellen aus String List lesen
 
Hallo PhöniX / Cylon

Den Veröffentlichungstermin für deinen Vokabeltrainer musst du noch etwas nach hinten schieben.
Oder hälst Du den auf http://www.lycoweb.de/ genannten Termin vom 10. - 15. Februar für realistisch?

Eine Grundlagenschulung, bzw. das Studieren von Tutorials, wäre zuerst angebracht. :wink:

Gruss
Blawen

PhöniX 1. Feb 2004 14:42

Re: Bestimmte Stellen aus String List lesen
 
^^ :stupid: ^^
ja und??
(haste mal nen Tutorial zu Strings und sowas??
Ich hab noch keins gefunden)...

blawen 1. Feb 2004 14:56

Re: Bestimmte Stellen aus String List lesen
 
Zitat:

Zitat von PhöniX
^^ :stupid: ^^
ja und??
(haste mal nen Tutorial zu Strings und sowas??
Ich hab noch keins gefunden)...


Z.B.:
http://www.tutorials.delphi-source.de/
http://www.delphi-treff.de/content/tutorials/
http://www.delphi-treff.de/content/edhonline/

zwar kein direktes Tutorial: (aber trotzdem gut)
http://www.delphipraxis.com/forum27_...ilanguage.html


Ansosnten Google verwenden... (z.B. Suchbegriff Delphi + String)

http://www.google.ch/search?hl=de&ie...a=lr%3Dlang_de

Gruss
Blawen

grayfox 1. Feb 2004 16:00

Re: Bestimmte Stellen aus String List lesen
 
hallo phönix!

ich würde es mal so versuchen
Delphi-Quellcode:
  readln(F,deinen_String);
sonst wartet das programm auf eine eingabe von der tastatur ;)

mfg, stefan

hboy 1. Feb 2004 16:14

Re: Bestimmte Stellen aus String List lesen
 
ops leicht blind und zu müde. sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry

hboy 1. Feb 2004 16:20

Re: Bestimmte Stellen aus String List lesen
 
und niemand hats gemerkt... ouh jeh. Ja des is schon en stück blindheit meinerseits, habs halt nie in Delphi ausprobiert.
klarklar beim Lesen aus ner Datei Readln(F, Variable). Tut mir echt sorry wg. der Verwirrung. :wall: :wall: :wall: :wall:

PhöniX 1. Feb 2004 17:47

Re: Bestimmte Stellen aus String List lesen
 
hmm...
jetzt hab ich schon ne datenbank
aber trotzdem danke.. :angle:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz