Autor |
Beitrag |
crip
Beiträge: 24
|
Verfasst: 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
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 was ist "REAL LIFE" und wo zur Hoelle kann ich es runterladen!!!
|
|
Pit
Beiträge: 160
|
Verfasst: So 23.06.02 02:10
Zuletzt bearbeitet von Pit am Sa 05.10.02 05:43, insgesamt 2-mal bearbeitet
|
|
Klabautermann
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: 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
Quelltext 1:
| ReWrite(SchuelerDatei); |
in
Quelltext 1:
| ReWrite(SchuelerDatei, SizeOf(tSchueler)); |
ändern. Dann könnte es klappen
Gruß
Klabautermann
|
|
Pit
Beiträge: 160
|
Verfasst: So 23.06.02 02:25
Zuletzt bearbeitet von Pit am Sa 05.10.02 05:45, insgesamt 1-mal bearbeitet
|
|
Klabautermann
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: 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 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
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
Beiträge: 160
|
Verfasst: So 23.06.02 02:39
Zuletzt bearbeitet von Pit am Sa 05.10.02 05:46, insgesamt 1-mal bearbeitet
|
|
crip
Beiträge: 24
|
Verfasst: 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:
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
Beiträge: 160
|
Verfasst: So 23.06.02 21:11
Zuletzt bearbeitet von Pit am Sa 05.10.02 05:48, insgesamt 1-mal bearbeitet
|
|
crip
Beiträge: 24
|
Verfasst: Mo 24.06.02 16:27
Tja, werde ich den lehrer morgen zeigen
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
|
|
Udontknow
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: 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
Beiträge: 24
|
Verfasst: Mo 24.06.02 16:36
hat nicht so gut geklappt koentest du mir bitte den ganzen
BlockREAD befehl hinschreiben
Mfg
Crip
|
|
Pit
Beiträge: 160
|
Verfasst: Mo 24.06.02 18:31
Zuletzt bearbeitet von Pit am Sa 05.10.02 05:49, insgesamt 1-mal bearbeitet
|
|
Pit
Beiträge: 160
|
Verfasst: Mo 24.06.02 18:34
Zuletzt bearbeitet von Pit am Sa 05.10.02 05:52, insgesamt 1-mal bearbeitet
|
|
cbs
Beiträge: 207
Erhaltene Danke: 1
|
Verfasst: 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
Beiträge: 160
|
Verfasst: Mo 24.06.02 20:16
Zuletzt bearbeitet von Pit am Sa 05.10.02 05:53, insgesamt 1-mal bearbeitet
|
|
cbs
Beiträge: 207
Erhaltene Danke: 1
|
Verfasst: 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!!!
|
|
Pit
Beiträge: 160
|
Verfasst: Mo 24.06.02 21:23
Zuletzt bearbeitet von Pit am Sa 05.10.02 05:46, insgesamt 1-mal bearbeitet
|
|
cbs
Beiträge: 207
Erhaltene Danke: 1
|
Verfasst: Mo 24.06.02 21:28
das ist wahr... ok danke für deine mühe
|
|