Autor Beitrag
crip
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: So 23.06.02 00:13 
ich habe ein program Erstellt das die Name, Vorname und Stufe eines Schuelers (so lautete die Aufgabe) speichert doch habe ich ein Problem beim Auslesen der Datei es geht mit Blockread nun weiss ich nicht wie :D
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button2Click(Sender: TObject);
  var i: integer;
      SDatName: String;
begin
  if SDSpeichern.Execute then
    begin
      SDatName := SDSpeichern.FileName;
      AssignFile(SchuelerDatei,SDatName);
      rewrite(SchuelerDatei);
      for i := 1 to anzahlSchueler do
        BlockWrite(SchuelerDatei,SchuelerListe[i],sizeOf(TSchueler));
      CloseFile(SchuelerDatei);
    end;
end;

mfg

:?: Crip :arrow: was ist "REAL LIFE" und wo zur Hoelle kann ich es runterladen!!!
Pit
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: So 23.06.02 02:10 


Zuletzt bearbeitet von Pit am Sa 05.10.02 05:43, insgesamt 2-mal bearbeitet
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 23.06.02 02:18 
Hallo Pit,

jetzt gehst du aber davon aus das der Datensatz nur ein Byte groß ist.
Ich unterstelle jetzt mal, das Schuelerliste ein Array of tSchueler ist. Dann musst du aber trotzdem bekanntgeben wie groß tSchueler ist.

Ich würde also in deinem Beispiel die Zeile
ausblenden Quelltext
1:
ReWrite(SchuelerDatei);					

in
ausblenden Quelltext
1:
ReWrite(SchuelerDatei, SizeOf(tSchueler));					

ändern. Dann könnte es klappen ;)

Gruß
Klabautermann
Pit
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: So 23.06.02 02:25 


Zuletzt bearbeitet von Pit am Sa 05.10.02 05:45, insgesamt 1-mal bearbeitet
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 23.06.02 02:30 
Pit hat folgendes geschrieben:
Klabautermann hat folgendes geschrieben:
jetzt gehst du aber davon aus das der Datensatz nur ein Byte groß ist.

Ganz und gar nicht. Ich gehe gehe davon aus, daß SchuelerDatei als
ausblenden Quelltext
1:
2:
var
  SchuelerDatei: file of TSchueler;
deklariert ist.

Ok, wenn das der Fall ist stimmt es mit deiner Version natürlich. Allerdings glaube ich, das die Aufgabe ein reines FILE verlangt - wenn schon Read & Write nicht verwendet werden dürfen. Aber da kann nur crip licht ins dunkel bringen.

Pit hat folgendes geschrieben:

Zitat:
Ich würde also in deinem Beispiel die Zeile
ausblenden Quelltext
1:
ReWrite(SchuelerDatei);					

Hier ist noch ein Denkfehler drin, die Standard-Recordgröße bei file ist 128, nicht 1.

Punkt an dich. Allerdings währe es ein doller Zufall wenn tSchüler grade 128 Byte groß währe.

Gute Nacht
Klabautermann
Pit
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: So 23.06.02 02:39 


Zuletzt bearbeitet von Pit am Sa 05.10.02 05:46, insgesamt 1-mal bearbeitet
crip Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: So 23.06.02 19:48 
Pit da hast du recht, und damit ihr euch nit streitet und mir helfen koennt poste ich mal den ganzen code:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    LBSchueler: TListBox;
    EdName: TEdit;
    EdVorname: TEdit;
    EdStufe: TEdit;
    Button1: TButton;
    EdWarn: TEdit;
    Button2: TButton;
    SDSpeichern: TSaveDialog;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button3: TButton;
    OpenDialog: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
  const max = 35;

var
  Form1: TForm1;

implementation
  type
  TSchueler = record
                name,vorname: String;
                stufe: integer;
              end;

var
  einSchueler: TSchueler;
  SchuelerListe: array [1..max] of TSchueler;
  anzahlSchueler: integer;
  SchuelerDatei: file;

{$R *.DFM}

procedure anzeigen;
  var i: integer;
begin
  with Form1.LBSchueler do
  begin
    clear;
    for i := 1 to anzahlSchueler do
    begin
      with schuelerListe[i] do
        items.add(name+', '+vorname+'; '+IntToStr(stufe))
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EdWarn.text := '';
  if anzahlSchueler < max then
  begin
    inc(anzahlSchueler);
    with SchuelerListe[anzahlSchueler] do
    begin
      name := EdName.Text;
      vorname := EdVorname.Text;
      stufe := StrToInt(EdStufe.Text);
    end
  end
  else
    EdWarn.text := 'Die Liste ist voll' ;
  anzeigen
end;

procedure TForm1.Button2Click(Sender: TObject);
  var i: integer;
      SDatName: String;
begin
  if SDSpeichern.Execute then
    begin
      SDatName := SDSpeichern.FileName;
      AssignFile(SchuelerDatei,SDatName);
      rewrite(SchuelerDatei);
      for i := 1 to anzahlSchueler do
        BlockWrite(SchuelerDatei,SchuelerListe[i],sizeOf(TSchueler));
      CloseFile(SchuelerDatei);
    end;
end;
{ wuerde von mir gesriben aber da funzt sicherlich nit!!!!!! ich weiss echt nicht wie das geht, der lehrer hat es sche**** erklaert bzw. garnicht!!!!} //--->>>>
procedure TForm1.Button3Click(Sender: TObject);
var datei : file;
    dateiname : string;
    i,NumWritten,NumRead : integer;
begin
 if opendialog.execute then
 begin
   dateiname := opendialog.FileName;
   assignfile(datei,dateiname);
   BlockRead(datei, schuelerliste, RecSize(datei));
     anzeigen;
 end;
end;
// ende -- des selbst gesriebenes
initialization
  anzahlSchueler := 0;

finalization
  anzahlSchueler := 35;

end.

ich hoffe ihr koennt mir helfen
mfg Crip
Pit
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: So 23.06.02 21:11 


Zuletzt bearbeitet von Pit am Sa 05.10.02 05:48, insgesamt 1-mal bearbeitet
crip Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mo 24.06.02 16:27 
Tja, werde ich den lehrer morgen zeigen :twisted:

Das mit dem "file of tschueler " hatte er schon gehabt, habe ich aber geaendert, danke!!!! ich hoffe es funzt werde auch gleich ausprobieren!! :-)

Mfg
Crip :roll:
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 24.06.02 16:35 
Hi,

bei dieser Gelegenheit wäre es vielleicht eine Überlegung wert, das ganze sofort durch Stream-Objekte erledigen zu lassen. Ausrichtungen sind denen egal, und durch OOP lassen sich dann auch Routinen, mit denen man eigentlich auf die HD schreiben wollte, ganz fix dazu verwenden, Datensätze plötzlich übers Internet oder in ein Blobfeld einer Datenbank zu schicken.

Cu,
Udontknow
crip Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mo 24.06.02 16:36 
hat nicht so gut geklappt koentest du mir bitte den ganzen
BlockREAD befehl hinschreiben :?:

Mfg

Crip :D
Pit
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 24.06.02 18:31 


Zuletzt bearbeitet von Pit am Sa 05.10.02 05:49, insgesamt 1-mal bearbeitet
Pit
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 24.06.02 18:34 


Zuletzt bearbeitet von Pit am Sa 05.10.02 05:52, insgesamt 1-mal bearbeitet
cbs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: Mo 24.06.02 18:40 
@Udontknow:
Zitat:
... und durch OOP lassen sich dann auch Routinen, mit denen man eigentlich auf die HD schreiben wollte, ganz fix dazu verwenden, Datensätze plötzlich übers Internet oder in ein Blobfeld einer Datenbank zu schicken.

hi, ist zwar jetzt nicht unbedingt zu diesem thema aber könntest du dazu mal nen bsp machen (muß ja nicht unbedingt mit quellcode sein, nur so das man versteht wei sowas aussieht). wär echt mal interessant.

ich main ich könnts mir vorstellen mit vererbung und so... aber wie konkret macht man das so wie dus beschreiben hast? ich mein das sind ja dann föllich odere ergenisse (mit sonst gleicher funktionalität???). oder red (schreib) ich jetzt sch***?

PS: kannst mir ja auch ne mail schicken oder ne pm, wenn das hier nicht erörtert werden soll...
Pit
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 24.06.02 20:16 


Zuletzt bearbeitet von Pit am Sa 05.10.02 05:53, insgesamt 1-mal bearbeitet
cbs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: Mo 24.06.02 20:46 
jau, ok... dis hört sich ja schon mal nicht schlecht an... mir ging es aber darum wie ich das hier hinbekomme:
Udontknow hat folgendes geschrieben:
durch OOP lassen sich dann auch Routinen, mit denen man eigentlich auf die HD schreiben wollte, ganz fix dazu verwenden, Datensätze plötzlich übers Internet ... zu schicken.

wie das also funzt mit der vererbung (oder wie man auch sowas anstellt das ich eine function habe, in dem fall ein stream auf die HDD zu schreiben, und dann das ganze mit OOP (ich denk mal mit vererbung) übers internet zu verschicken... is klar das das nur nen bsp is, aber das interessiert mich jetzt mal wie sowas geht (wie wird das deklariert? was muss ich hinzufügen oder ändern? usw.)...

ich meine das sind ja zwei verschiendene schuhe... also wie geht sowas meiner function die ja nur auf die HDD schreibt plötzlich beizubringen das das über i-net verschickt werden kann (mir gehts wirklich nur um die OOP realisierung, das dazu noch mehr code erforderlich hist ist mir auch klar)?

verstehst? oder hat Udontknow da zuviel versprochen? ich mein ich muss ja meine function so umschreiben/oder so nutzen das ich damit quasi eien neue funktionalität realisieren kann.... also wie geht sowas??? wär echt toll wenn mal jemand dazu was schreibt... oder hab ich grad ne denkblockkade??? ok - in diesem fall helft mir bitte diese aufzuheben!!! :shock:
Pit
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 24.06.02 21:23 


Zuletzt bearbeitet von Pit am Sa 05.10.02 05:46, insgesamt 1-mal bearbeitet
cbs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: Mo 24.06.02 21:28 
das ist wahr... ok danke für deine mühe