Autor Beitrag
Johannes Maier
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 173

Win XP
D7 Prof
BeitragVerfasst: Di 12.10.04 20:35 
Hi,

ich habe ein Problem bei der Übersetzung eines Oberon-Codeabschnittes in Delphi. Dieser hier ist es:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
IMPORT Viewers, Texts, TextFrames, Oberon;
.
.
VAR
  R: Texts.Reader;
  W: Texts.Writer;
.
.
PROCEDURE error(n: INTEGER);
VAR pos: LONGINT;
BEGIN pos := Texts.Pos(R);
  IF pos > lastpos+2 THEN
    Texts.WriteString(W, " pos"); Texts.WriteInt(W, pos, 6);
    Texts.WriteString(W, " err"); Texts.WriteInt(W, n, 4); lastpos := pos;
    Texts.WriteString(W, " sym"); Texts.WriteInt(W, sy, 4);
    Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf)
  END
END error;


Dieses Reader und Writer Zeug ist das Problem ... Die gibt es zwar in Delphi auch, aber nicht mit gleichen Funktionen. Ich hoffe ihr könnt mir da helfen ;)

_________________
MfG
Johannes ehem. jbmaier
sourcehunter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 482

Win XP | Suse 10.1
Delphi 2005 Pers.
BeitragVerfasst: Di 12.10.04 20:37 
Was macht den dieses "Reader und Writer Zeugs", bzw was soll es machen?

_________________
Linux und OpenSource rulez!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 12.10.04 20:45 
Johannes Maier hat folgendes geschrieben:
Hi,

ich habe ein Problem bei der Übersetzung eines Oberon-Codeabschnittes in Delphi. Dieser hier ist es:

Problem demnächst bitte versuchen genauer zu Beschreiben in Hinsicht auf "Was soll der Code machen?"

Johannes Maier hat folgendes geschrieben:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
IMPORT Viewers, Texts, TextFrames, Oberon;
.
.
VAR
  R: Texts.Reader;
  W: Texts.Writer;
.
.
PROCEDURE error(n: INTEGER);
VAR pos: LONGINT;
BEGIN pos := Texts.Pos(R);
  IF pos > lastpos+2 THEN
    Texts.WriteString(W, " pos"); Texts.WriteInt(W, pos, 6);
    Texts.WriteString(W, " err"); Texts.WriteInt(W, n, 4); lastpos := pos;
    Texts.WriteString(W, " sym"); Texts.WriteInt(W, sy, 4);
    Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf)
  END
END error;


Dieses Reader und Writer Zeug ist das Problem ... Die gibt es zwar in Delphi auch, aber nicht mit gleichen Funktionen. Ich hoffe ihr könnt mir da helfen ;)

Ich geh einfach mal davon aus, dass das ein Konsolen-Programm ist und dort einen Fehler ausgeben soll
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:
Project OberonMitFehler;

Uses
    SysUtils;

VAR
  W: TextFile;

PROCEDURE error(n: INTEGER);
VAR pos: LONGINT;
BEGIN pos := Pos(R,'Was denn suchen???');
  IF pos > lastpos+2 THEN
  Begin
    Write(W, Format(' pos %.6d', [pos]));
    Write(W, Format(' err %.4d', [n]));
    lastpos := pos;
    Write(W, Format(' sym %.4d', [sy]));
    WriteLn(W); 
  END;
END;

end.


Unter der Annahme, dass W deine mit Append geöffnete Logfile ist.

Ansonsten bräuchte ich mehr Infos für die Übersetzung, da ich Oberon nicht kenne.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Johannes Maier Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 173

Win XP
D7 Prof
BeitragVerfasst: Di 12.10.04 20:51 
Das Ganze ist Teil eines Buches zu Compilerbau mit dem ich mich im Moment beschäftige, da ich vorhabe einen "etwas anderen" Matheparser zu schreiben.

Achja, den Pos-Befehl in Delphi kenne ich, aber ich vermute, dass er in Oberon etwas anderes macht, nämlich gibt er wahrscheinlich die aktuelle Position des Readers (der Zeichen für Zeichen liest) im Text wieder. Dabei wird nicht nach etwas Bestimmtem gesucht.
Kann man das nicht mit einem Reader in Delphi realisieren? Mein Problem ist halt nur, dass ich nicht weiß wie man Reader oder Writer einer Textquelle (Datei) zuweist, so dass sie davon lesen/dahinein schreiben.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  R: TReader;
.
.
.
pos := R.Position;

Das hab ich schon rausgefunden ;) Aber leider kA ob es mir weiterhilft ...

_________________
MfG
Johannes ehem. jbmaier
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 12.10.04 21:02 
Gut, dann sind also TReader und TWriter in Oberon TStreams:

Würde also bedeuten:

ausblenden Delphi-Quelltext
1:
2:
var
FS:TFileStream


ist deine Text-Datei, die du mit

ausblenden Delphi-Quelltext
1:
FS := TFileStream.Create('Datei.txt', fmOpenReadWrite);					


öffnest.

Lesen von Strings ist dann aber etwas kompliziert:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
S:String;
begin
  S := DeinText;
  FS.WriteBuffer(S[1], Length(S));
end;


Lesen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
S:String;
begin
  S := StringOfChar(#32, AnzahlZeichen);
  FS.ReadBuffer(S[1], Length(S));
end;


Hoffe, das hilft erstmal ein wenig weiter.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Alni
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 205

Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
BeitragVerfasst: Di 12.10.04 21:06 
Kann dir zwar nicht weiterhelfen hab mich selber noch nie mit TReader befasst, aber mich würde interessieren was du mit
Zitat:

"etwas anderen" Matheparser


meinst. Ich hab nämlich selber mal drei Matheparser geschrieben. (Drei deshalb weil man doch auch ab und zu dazu lernt ;) )

_________________
MfG Alex
Johannes Maier Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 173

Win XP
D7 Prof
BeitragVerfasst: Mi 13.10.04 19:56 
@BenBE: Ja das tut es ;) Mit Streams kenn ich mich aus, das sollte also klappen :)

@Alni: Falls er irgendwann mal fertig wird (ist bisher nur eine Idee) dann stell ich ihn hier rein. Vorher beschäftige ich mich erst mit Compilerbau (das hilft sehr) deshalb verrate ich keine Ideen/Details, sorry ;)

_________________
MfG
Johannes ehem. jbmaier