Autor Beitrag
newbie44 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 117

Windows XP, Windows ME
D6 Pers, D7 Enterprise
BeitragVerfasst: Do 22.07.04 17:26 
Hi,

habe das verbessert, doch der code hat immer noch fehler weis nicht wiso, hier ist er:

ausblenden volle Höhe 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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1; f:file; b: byte; l,z1,z2: integer;    
s: string;    
ausgabe: array [0..60of byte;
const  
buchstaben: array[0..60of 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'); //Alle deine Zeichen
hexwerte: array[0..60of 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'); //Codierte Integer als strings



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 :wink:
highhatcompy
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
BeitragVerfasst: Do 22.07.04 18:51 
Hallo da bin ich wieder!

Schau die mal den Code jetzt an!
ausblenden volle Höhe 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:
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  
    { Private-Deklarationen }  
  public  
    { Public-Deklarationen }  
  end;  

 
var  
  Form1: TForm1; f:file; b: byte; l,z1,z2: integer;      
s: string;      
ausgabe: array [0..60of byte;  
const    
buchstaben: array[0..60of 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'); //Alle deine Zeichen 
// Achtung die hier eingetragen Werte müssen Integer Werte sein!!!
//z.B. aus '31' muss '49' werden usw.
hexwerte: array[0..60of 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));  
 
     // bis hier wird der Header geschrieben
     begin  
     s:='Megapol';  
     l:=length(s);  
     for z1:=1 to l do  
     begin  
          for z2:=0 to 60 do  
          begin  
               //Achtung: habe copy befehl geändert!!!!
               if buchstaben[z2]=copy(s,z1,1then 
               begin
                    //Hier wird das Codierte in die Datei geschreiben!!
                    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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
BeitragVerfasst: Fr 23.07.04 13:36 
Hallo,
hier meine Antwort zu Deiner Frage in der PN!
Habe den Code mal ein wenig gewandelt!
ausblenden 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);  //Ermittlung der Länge
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;
//wenn der String weniger als 8 Zeichen hat wird diese schleife durchlaufen
//und schreibt die fehlenden 00
     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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 117

Windows XP, Windows ME
D6 Pers, D7 Enterprise
BeitragVerfasst: 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 :wink: :idea:
highhatcompy
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
BeitragVerfasst: Fr 23.07.04 13:59 
Hi,
du machst Dir doch sicher einen Spass mit Mir!?? :wink: :lol: :roll:

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 :wink: :idea:


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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 117

Windows XP, Windows ME
D6 Pers, D7 Enterprise
BeitragVerfasst: Fr 23.07.04 15:31 
Nein, ich mach keinen Spaß mit dir, ich habe jetzt den Quellcode nochmal umgeschrieben, jetzt funzt es, super

ausblenden volle Höhe 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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1; f:file; b: byte; l,z1,z2: integer; z3,z4: integer;
s: string;    
ausgabe: array [0..60of byte;
const  
buchstaben: array[0..60of 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'); //Alle deine Zeichen
hexwerte: array[0..60of 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'); //Codierte Integer als strings



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));    
   
     // bis hier wird der Header geschrieben
     begin
     s:='abcdef';
l:=length(s);  //Ermittlung der Länge  
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;  
//wenn der String weniger als 8 Zeichen hat wird diese schleife durchlaufen
//und schreibt die fehlenden 00  
     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,1then
               begin
                    //Hier wird das Codierte in die Datei geschreiben!!
                    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 :) :D

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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 117

Windows XP, Windows ME
D6 Pers, D7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 117

Windows XP, Windows ME
D6 Pers, D7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 117

Windows XP, Windows ME
D6 Pers, D7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 117

Windows XP, Windows ME
D6 Pers, D7 Enterprise
BeitragVerfasst: 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 :roll:
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Fr 23.07.04 17:13 
nimm einfach eine Schleife von 5 bis 17 und schreibe jedesmal dein P

ausblenden Delphi-Quelltext
1:
2:
3:
4:
for i:=5 to 17 do
begin

end;
highhatcompy
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 117

Windows XP, Windows ME
D6 Pers, D7 Enterprise
BeitragVerfasst: Fr 23.07.04 17:55 
Hab jetzt folgendes versucht:

ausblenden 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 :roll: :?:
highhatcompy
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 117

Windows XP, Windows ME
D6 Pers, D7 Enterprise
BeitragVerfasst: 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 :?: