| Autor |
Beitrag |
adfontes
      
Beiträge: 82
Win7 (64bit), WinXP
Delphi 2010 Prof, Delphi XE2 (Trial)
|
Verfasst: So 11.09.05 22:24
huhu,
ich schlag mich immernoch mit meiner bücherverwaltung rum ^^
und hab mal wieder ein Problem:
Ich habe eine alte Datei die von einem uralten Pascal Programm kommt, in dem ich die Bücher früher verwaltet hab, nur mittlerweile is das ja so veraltet... daher ja überhaupt das projekt in delphi
Die alte Datei hab ich jetzt versucht über ein separates Programm zu übertragen... einziges problem: ich krieg andauernd fehler
mach wohl wie immer was falsch...
hier der record von dem alten pascal proggi, der grundlage der datei ist:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| type buchlang=record art:integer; fach:string[1]; thema:string[1]; autorvor:string[12]; autornach:string[18]; titel:string[50]; jahr:string[4]; auflage:string[4]; verlag:string[30]; isbn:string[15]; signatur:string[8]; ausleihbar:integer; invnummer:string[13]; end; |
dann der neue record:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| Type Fachbereich = RECORD Name : String[40]; Kennbuchstaben : Char; BZahl,Farbe : Integer; end;
Type Themenbereich = RECORD Name : String[40]; Bzahl : Integer; kennzahl : string[1]; end;
Type Book = RECORD Titel : String[50]; Verlag,AVorName,AName : String[30]; Fachb : Fachbereich; Themenb : Themenbereich; biblio: char; isbn,invnummer : String[15]; jahr,sig : String[10]; auflage : string[4]; ausleihbar,del : Boolean; END; |
und jetzt der versuch das ursprungsfile in den neue zu kriegen:
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:
| begin AssignFile (f,'C:\Buchlang.bl'); ASSignFile (g,'C:\Bibliothek.db'); Reset(f); Rewrite(g); While NOT EOF(f) do begin read(f,alt); neu.Fachb.kennbuchstaben:=chr(STRTOINT(alt.fach)); neu.themenb.kennzahl:=alt.thema; neu.AVorName:=alt.autorvor; neu.AName:=alt.autornach; neu.titel:=alt.titel; neu.jahr:=alt.jahr; neu.auflage:=alt.auflage; neu.verlag:=alt.verlag; neu.isbn:=alt.isbn; neu.sig:=alt.signatur; if alt.art=1 then neu.biblio:='A'; if alt.art=2 then neu.biblio:='U'; if alt.ausleihbar=1 then neu.ausleihbar:=True; if alt.ausleihbar=2 then neu.ausleihbar:=False; if (alt.ausleihbar<>1) and (alt.ausleihbar<>2) then neu.ausleihbar:=False; neu.invnummer:=alt.invnummer; neu.del:=false; write(g,neu); end; closefile(f); closefile(g); end; |
ich glaub ich geb bald auf  ... er gibt mir immer solche errors wie :
Quelltext 1: 2:
| Erste Zufalls-Exception bei $7C81EB33. Exception-Klasse EConvertError mit Meldung ''(Die deu' ist kein gültiger Integerwert'. Prozess Project4.exe (3724) |
Moderiert von Christian S.: Zeilenumbruch vor Codetag eingefügt
Einloggen, um Attachments anzusehen!
|
|
Grishnak
      
Beiträge: 221
Windows XP Home
Delphi 7 PE, Delphi 2005 PE
|
Verfasst: So 11.09.05 23:01
Bis jetzt habe ich soviel rausgefunden:
Ein (alter) Datensatz besteht aus 171 Bytes!
Die Datei ist 344.565 Bytes groß und enthält also 2015 Datensätze!
Ich befürchte, Pascal hat Integer-Werte und/oder Strings anders behandelt als Delphi (z.B. für Integer-Werte nur 2 Bytes benutzt, statt 4 Bytes, wie es mein Delphi 7 tut). Daraus folgt, dass die Daten aus der Datei nicht mehr in deinen neuen alten Datentyp passen!
Weiteres später...
...später:
Ich denke, das hilft dir weiter:
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:
| procedure AusAltMachNeu; var AltBuchFile: file of char; NeuBuchFile: file of Book; AltBuchStr: string[171]; B: Book; begin AssignFile(AltBuchFile, 'BUCHLANG.BL'); ReSet(AltBuchFile);
AssignFile(NeuBuchFile,'Bibliothek.db'); ReWrite(NeuBuchFile);
SetLength(AltBuchStr, 171); while not EOF(AltBuchFile) do begin BlockRead(AltBuchFile, AltBuchStr[1], 171);
B.Fachb.Kennbuchstaben:=AltBuchStr[4]; B.Themenb.kennzahl:=AltBuchStr[6]; B.AVorName:=Trim(MidStr(AltBuchStr, 8, 12)); B.AName:=Trim(MidStr(AltBuchStr, 21, 18)); B.Titel:=Trim(MidStr(AltBuchStr, 40, 50)); B.jahr:=Trim(MidStr(AltBuchStr, 91, 4)); B.auflage:=Trim(MidStr(AltBuchStr, 96, 4)); B.Verlag:=Trim(MidStr(AltBuchStr, 101, 30)); B.isbn:=Trim(MidStr(AltBuchStr, 132, 15)); B.sig:=Trim(MidStr(AltBuchStr, 148, 8));
case Ord(AltBuchStr[1]) of 1: B.biblio:='A'; 2: B.biblio:='U'; end;
case Ord(AltBuchStr[156]) of 1: B.ausleihbar:=true; else B.ausleihbar:=false; end;
B.invnummer:=Trim(MidStr(AltBuchStr, 159, 10)); B.del:=false;
Write(NeuBuchFile, B); end;
CloseFile(NeuBuchFile); CloseFile(AltBuchFile); end; |
_________________ Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
|
|
adfontes 
      
Beiträge: 82
Win7 (64bit), WinXP
Delphi 2010 Prof, Delphi XE2 (Trial)
|
Verfasst: Mi 14.09.05 14:46
sorry, dass ich mich ne weile nicht gemeldet hatte, war aber so im stess, dass ich an dem proejkt nur wenig machen konnte...
danke schon mal für den vorschlag, ich werds auch direkt mal ausprobieren und dann schreiben wie's gelaufen ist
greetz
adfontes
......nach dem test:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| [Fehler] Unit4.pas(93): E2003 Undefinierter Bezeichner: 'MidStr' [Fehler] Unit4.pas(93): E2250 Es gibt keine überladene Version von 'Trim', die man mit diesen Argumenten aufrufen kann [Fehler] Unit4.pas(94): E2250 Es gibt keine überladene Version von 'Trim', die man mit diesen Argumenten aufrufen kann [Fehler] Unit4.pas(95): E2250 Es gibt keine überladene Version von 'Trim', die man mit diesen Argumenten aufrufen kann [Fehler] Unit4.pas(96): E2250 Es gibt keine überladene Version von 'Trim', die man mit diesen Argumenten aufrufen kann [Fehler] Unit4.pas(97): E2250 Es gibt keine überladene Version von 'Trim', die man mit diesen Argumenten aufrufen kann [Fehler] Unit4.pas(98): E2250 Es gibt keine überladene Version von 'Trim', die man mit diesen Argumenten aufrufen kann [Fehler] Unit4.pas(99): E2250 Es gibt keine überladene Version von 'Trim', die man mit diesen Argumenten aufrufen kann [Fehler] Unit4.pas(100): E2250 Es gibt keine überladene Version von 'Trim', die man mit diesen Argumenten aufrufen kann [Fehler] Unit4.pas(119): E2250 Es gibt keine überladene Version von 'Trim', die man mit diesen Argumenten aufrufen kann [Fataler Fehler] Project4.dpr(5): F2063 Verwendete Unit 'Unit4.pas' kann nicht compiliert werden |
o_O ... sicher, dass es das MidStr in Verbindung mit Trim gibt ?
weil er bleibt genau in der 1. Zeile wo das MidStr verwendet wird hängen...
Delphi-Quelltext 1:
| B.AVorName:=Trim(MidStr(AltBuchStr, 8, 12)); |
|
|
Grishnak
      
Beiträge: 221
Windows XP Home
Delphi 7 PE, Delphi 2005 PE
|
Verfasst: Mi 14.09.05 22:06
Die Funktion 'MidStr' findest du in Unit 'StrUtils'; diese musst du per 'uses'-Befehl mit einbinden!
Dann sollte es auch mit dem 'Trim' funktionieren!
_________________ Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
|
|
adfontes 
      
Beiträge: 82
Win7 (64bit), WinXP
Delphi 2010 Prof, Delphi XE2 (Trial)
|
Verfasst: Do 15.09.05 16:21
( : Danke Danke Danke Danke Danke Danke Danke Danke Danke Danke Danke Danke Danke Danke : )
jetzt hats funktioniert... sorry, der Fehler die Unit zu vergessen war echt doof  ... na ja
danke
greetz
adfontes
|
|
|