Autor |
Beitrag |
newbie44 
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Do 22.07.04 17:26
Hi,
habe das verbessert, doch der code hat immer noch fehler weis nicht wiso, hier ist er:
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:
| type TForm1 = class(TForm) OK: TButton; GroupBox1: TGroupBox; Name: TLabeledEdit; procedure OKClick(Sender: TObject); private public end;
var Form1: TForm1; f:file; b: byte; l,z1,z2: integer; s: string; ausgabe: array [0..60] of byte; const buchstaben: array[0..60] of char = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9'); hexwerte: array[0..60] of string = ('31','32','33','34','35','36','37','38','39','3A','3B','3C','3D','3E','3F','20','21','22','23','24','25','26','27','28','29','2A','11','12','13','14','15','16','17','18','19','1A','1B','1C','1D','1E','1F','00','01','02','03','04','05','06','07','08','09','10','a','b','c','d','e','f','g','h','i');
implementation
{$R *.dfm}
procedure TForm1.OKClick(Sender: TObject); begin AssignFile(f,'C:\header.bin'); Rewrite(f,1); b:=$01; Blockwrite(f,b,sizeof(Byte)); b:=$00; Blockwrite(f,b,sizeof(Byte)); b:=$00; Blockwrite(f,b,sizeof(Byte)); b:=$00; CloseFile(f); begin s:='Megapol'; l:=length(s); for z1:=1 to l do begin for z2:=0 to 60 do begin if buchstaben[z2]=copy(s,1,z1) then showmessage('Vorher: '+buchstaben[z2]+' -> nachher: '+hexwerte[z2] end; end; end; end. |
Könntest du Ihn bitte für mich verbessern, so das er läuft, ich würde dann auch meine Fehler besser verstehen
Gruß
Sebby.
Muss jetzt weg, bin erst um 17:45 wieder da 
|
|
highhatcompy
      
Beiträge: 190
Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
|
Verfasst: Do 22.07.04 18:51
Hallo da bin ich wieder!
Schau die mal den Code jetzt an!
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:
| type TForm1 = class(TForm) OK: TButton; GroupBox1: TGroupBox; Name: TLabeledEdit; procedure OKClick(Sender: TObject); private public end;
var Form1: TForm1; f:file; b: byte; l,z1,z2: integer; s: string; ausgabe: array [0..60] of byte; const buchstaben: array[0..60] of char = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9'); hexwerte: array[0..60] of string = ('31','32','33','34','35','36','37','38','39','3A','3B','3C','3D','3E','3F','20','21','22','23','24','25','26','27','28','29','2A','11','12','13','14','15','16','17','18','19','1A','1B','1C','1D','1E','1F','00','01','02','03','04','05','06','07','08','09','10','a','b','c','d','e','f','g','h','i');
implementation
{$R *.dfm}
procedure TForm1.OKClick(Sender: TObject); begin AssignFile(f,'C:\header.bin'); Rewrite(f,1); b:=1; Blockwrite(f,b,sizeof(Byte)); b:=0; Blockwrite(f,b,sizeof(Byte)); b:=0; Blockwrite(f,b,sizeof(Byte)); begin s:='Megapol'; l:=length(s); for z1:=1 to l do begin for z2:=0 to 60 do begin if buchstaben[z2]=copy(s,z1,1) then begin b:=strtoint(hexwerte[z2]); Blockwrite(f,b,sizeof(Byte)); end; end; end; CloseFile(f); end; end. |
Ich hoffe ich konnte dir weiter helfen!
Highhatcompy
_________________ Bist Du ein Programmierer, so wirst Du gegen Computer, Hardwarehersteller und Anwender verlieren. (Quelle: Murphy's Computer-Gesetz)
|
|
highhatcompy
      
Beiträge: 190
Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
|
Verfasst: Fr 23.07.04 13:36
Hallo,
hier meine Antwort zu Deiner Frage in der PN!
Habe den Code mal ein wenig gewandelt!
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: 24: 25:
| ... var z3,z4: integer; ... s:='Megapol'; l:=length(s); AssignFile(f,'C:\header.bin'); Rewrite(f,1); b:=1; Blockwrite(f,b,sizeof(Byte)); b:=0; Blockwrite(f,b,sizeof(Byte)); b:=0; Blockwrite(f,b,sizeof(Byte)); z3:=8-l; if z3>0 then begin for z4:=1 to z3 do begin b:=0; Blockwrite(f,b,sizeof(Byte)); end; end; CloseFile(f); |
Hoffe das ich helfen konnte!
Highhatcompy
_________________ Bist Du ein Programmierer, so wirst Du gegen Computer, Hardwarehersteller und Anwender verlieren. (Quelle: Murphy's Computer-Gesetz)
|
|
newbie44 
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Fr 23.07.04 13:44
Hey danke, das funzt ja bestends, noch ne Frage wegen des Taschenrechners in Windows, da gibt es ja die Funktion hex, muss ich dann auf Dez Okt oder Bin schalten?
Danke
Sebby 
|
|
highhatcompy
      
Beiträge: 190
Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
|
Verfasst: Fr 23.07.04 13:59
Hi,
du machst Dir doch sicher einen Spass mit Mir!??
newbie44 hat folgendes geschrieben: | Hey danke, das funzt ja bestends, noch ne Frage wegen des Taschenrechners in Windows, da gibt es ja die Funktion hex, muss ich dann auf Dez Okt oder Bin schalten?
Danke
Sebby  |
Du stellst den Rechner auf Hex gibst den Hexwert ein, und dann stellst du ihn auf dez und du hast den Wert!
Highhatcompy
_________________ Bist Du ein Programmierer, so wirst Du gegen Computer, Hardwarehersteller und Anwender verlieren. (Quelle: Murphy's Computer-Gesetz)
|
|
newbie44 
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Fr 23.07.04 15:31
Nein, ich mach keinen Spaß mit dir, ich habe jetzt den Quellcode nochmal umgeschrieben, jetzt funzt es, super
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:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) OK: TButton; GroupBox1: TGroupBox; Name: TLabeledEdit; procedure OKClick(Sender: TObject); private public end;
var Form1: TForm1; f:file; b: byte; l,z1,z2: integer; z3,z4: integer; s: string; ausgabe: array [0..60] of byte; const buchstaben: array[0..60] of char = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9'); hexwerte: array[0..60] of string = ('49','50','51','52','53','54','55','56','57','3A','3B','3C','3D','3E','3F','20','21','22','23','24','25','26','27','28','29','2A','11','12','13','14','15','16','17','18','19','1A','1B','1C','1D','1E','1F','00','01','02','03','04','05','06','07','08','09','10','a','b','c','d','e','f','g','h','i');
implementation
{$R *.dfm}
procedure TForm1.OKClick(Sender: TObject); begin AssignFile(f,'C:\header.bin'); Rewrite(f,1); b:=1; Blockwrite(f,b,sizeof(Byte)); b:=0; Blockwrite(f,b,sizeof(Byte)); b:=0; Blockwrite(f,b,sizeof(Byte)); begin s:='abcdef'; l:=length(s); AssignFile(f,'C:\header.bin'); Rewrite(f,1); b:=1; Blockwrite(f,b,sizeof(Byte)); b:=0; Blockwrite(f,b,sizeof(Byte)); b:=0; Blockwrite(f,b,sizeof(Byte)); z3:=8-l; if z3>0 then begin for z4:=1 to z3 do begin b:=0; Blockwrite(f,b,sizeof(Byte)); end; for z2:=0 to 60 do for z1:=1 to l do
begin if buchstaben[z2]=copy(s,z1,1) then begin b:=strtoint(hexwerte[z2]); Blockwrite(f,b,sizeof(Byte)); end;
end; end; CloseFile(f); end; end; end. |
So jetzt müssen die P's geschrieben werden, sind eine ganz bestimmte anzahl, muss mal nachzählen.
bis später
Sebby
p.s. hab was vergessen, ich muss doch diese einstellung mit den nullen weglassen, ist doch nicht so wie ich immer dachte, dafür kommen halt mehr p's.
Also noch mal im Klartext.
01 00 00 kommt immer dann kommt der Streckenname z. B. Arcade Dann kommen P's bis zur position 88, wie formuliere ich das?
Gruß
Sebby
|
|
highhatcompy
      
Beiträge: 190
Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
|
Verfasst: Fr 23.07.04 15:36
Hallo,
dann ist ja gut!
Mit den P's machst Du es genauso wie wie mit den 00 für den Header. Eine For ...Next Schleife und dann sollte es gehen!
Viel Spass noch!
_________________ Bist Du ein Programmierer, so wirst Du gegen Computer, Hardwarehersteller und Anwender verlieren. (Quelle: Murphy's Computer-Gesetz)
|
|
newbie44 
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Fr 23.07.04 15:38
Aber wie mach ich das die P's nur bis zu einer ganz bestimmten Stelle gehen  es sind ja manchmal mehr oder weniger, ich kann dir auch gerne mal so eine datei schicken.
Gruß
Sebby 
|
|
highhatcompy
      
Beiträge: 190
Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
|
Verfasst: Fr 23.07.04 15:47
Na,
mach das mal, aber vieleicht solltest Du dich mal mit Streams beschäftigen! Denn Streams kannst Du einfach auslesen. Wenn jetzt die Positionen bekannt sind kannst du einfach an diese Stelle etwas ändern.
Aber Streams sind nicht so meine Sache, da gibts sicher gute Tips im Forum, also mal suchen.
Highhatcompy
_________________ Bist Du ein Programmierer, so wirst Du gegen Computer, Hardwarehersteller und Anwender verlieren. (Quelle: Murphy's Computer-Gesetz)
|
|
newbie44 
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Fr 23.07.04 15:58
Titel: Bis zu einer bestimmten position in einer datei schreiben
Hi,
ich möchte in einer datei nur bis zu einer bestimmen Punkt schreiben. Ich habe mithilfe eines Hexedtiors die Position gefunden. Die Position hat die Nummer 17, bis dorthin möchte ich P's schreiben, nicht mehr und auch nicht weniger, übrigends p heißt in hexadezimal 50
Gruß
Sebby 
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Fr 23.07.04 16:10
Hi!
Beschäftige dich doch am besten dazu einfach ein wenig mit Streams. Du könntest die Datei z.B. in einen MemoryStream einlesen, dann über die Eigenschaft Memory die 17 Bytes ändern und anschliessend per SaveToFile das geänderte File zurückschreiben.
Cu,
Udontknow
|
|
newbie44 
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Fr 23.07.04 16:14
Udontknow hat folgendes geschrieben: | Hi!
Beschäftige dich doch am besten dazu einfach ein wenig mit Streams. Du könntest die Datei z.B. in einen MemoryStream einlesen, dann über die Eigenschaft Memory die 17 Bytes ändern und anschliessend per SaveToFile das geänderte File zurückschreiben.
|
Gut, das problem is ja nur, das ich die datei schon offen hab, schau dir mal meinen anderen beitrag an, da steht der sourcecode bis jetzt dabei. Ich schau mal was ich über Streams rausfinden kann.
By By
Sebby 
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Fr 23.07.04 16:23
Na, dann öffnest du die Datei eben nicht mit Rewrite/Reset, sondern liest, wie bereits geschrieben, die Datei in einen MemoryStream ein. Du musst dann übrigens gar nicht mal die Eigenschaft Memory nutzen, sondern stellst einfach die Position auf 0 und schreibst 17 mal dein gewünschtes Byte in den Stream.
Cu,
Udontknow
|
|
newbie44 
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Fr 23.07.04 16:47
Du musst mich falsch verstanden haben, ich bin bei position 5 in der datei und möchte bis position 17 P's schreiben. Bitte gib mir konkreter hilfe, ich finde ja so wenig darüber im web.
gruß
sebby 
|
|
SvenAbeln
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: Fr 23.07.04 17:13
nimm einfach eine Schleife von 5 bis 17 und schreibe jedesmal dein P
Delphi-Quelltext 1: 2: 3: 4:
| for i:=5 to 17 do begin
end; |
|
|
highhatcompy
      
Beiträge: 190
Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
|
Verfasst: Fr 23.07.04 17:24
Hallo newbie44,
hier ist mal wieder Highhatc. ,kleiner Tip von mir gib in der Forumsuche "Hex stream" ein und du gelangs zu einem coolen Thread der dich Interessieren könnte!
Wo ist den die email mit der Datei?
Highhatcompy
_________________ Bist Du ein Programmierer, so wirst Du gegen Computer, Hardwarehersteller und Anwender verlieren. (Quelle: Murphy's Computer-Gesetz)
|
|
newbie44 
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Fr 23.07.04 17:55
Hab jetzt folgendes versucht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| r:=l+3 for r to 17 do begin Blockwrite(f,b,sizeof(Byte)); b:=80; end |
Er sagt nur, das ein Operator oder Semikolon Fehlt, wo muss ich diesen Einfügen, würde diese Behauptung überhaupt funktionieren?
Gruß
Sebby 
|
|
highhatcompy
      
Beiträge: 190
Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
|
Verfasst: Fr 23.07.04 18:04
Hallo,
schau mal Zeile 1, da fehlt am ende ein Semikolon!
Und B:=80; muss bestimmt vor Blockwrite stehen!
Versuche es aber trotzdem mit Streams(ist schneller und bestimmt einfacher)!
Highhatcompy
_________________ Bist Du ein Programmierer, so wirst Du gegen Computer, Hardwarehersteller und Anwender verlieren. (Quelle: Murphy's Computer-Gesetz)
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Fr 23.07.04 18:13
ich glaube, du solltest dich eher erstmal mit dem nativen Pascal auseinandersetzen. Also wie schreibe ich eine For-Schleife etc. Oder waren die Fehler beabsichtigt?
grez
msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
newbie44 
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Fr 23.07.04 18:25
Frage zu Streams,
kann ich die irgendwie programmieren, das diese ab einen gewissen punkt beginnen, z. B. In der Datei steht nochwas davor, z. B.
HalloHalloHallo, ich möchte die Position des letzten o's bestimmen und ab dort bis 0x0017 schreiben, geht das irgendwie?
gruß
sebby 
|
|
|