![]() |
Zuweisungsscanner????
Hallo!
Ich hänge seit einer Woche an diesem blöden Zuweisungsscanner und weiß echt nicht weiter, das ist die Aufgabe: Ich soll eine Art Zuweisungsscanner implementieren, der aus einem edit-feld die einzelnen Bestandteile rauszieht, in einem Array in einer zweiten Unit speichert und dass ganze dann in einer Listbox wiedergibt. Dabei soll das ganze ungefähr so aussehen: Eingetippt: a:=b; Ausgabe: a := b ; oder: anna:=34 + jojo; => anna := 34 + jojo ; Hier ist schon etwas quelltext:
Delphi-Quellcode:
Da stellt sich mir immer die Frage: :wiejetzt:
unit zScanclss;
interface type tTokenfolge=array[1..100] of string; type tOperatormenge = set of '*'..'/'; //Menge von Zeichen (=char) von .. bis // bezogen auf den ASCII-Code type tZuweisungsScanner = class private Tokenfolge: tTokenfolge; index : integer; // Aktueller Tokenfolgenindex Operatormenge: tOperatormenge; public constructor create; function isOperator(c: char): boolean; procedure makeTokenfolge(quelle : string); function getTokenfolge: tTokenfolge; end; implementation constructor tZuweisungsScanner.create; begin Operatormenge := ['*','+','-','/']; index:=0; // Noch kein Token ermittelt. end; function tZuweisungsScanner.isOperator(c: char): boolean; begin result := (c in Operatormenge); // Ist c in der Menge enthalten? end; procedure tZuweisungsScanner.makeTokenfolge(quelle : string); var l,x:integer; begin l:=length(quelle); for x:=1 to l do begin Tokenfolge[x]:=quelle[x]; end; end; function tZuweisungsScanner.getTokenfolge: tTokenfolge; var i:integer; begin result[1]:=tokenfolge[1]; i:=1; while tokenfolge[i+1]<>':' do begin result[1]:=result[i]; inc(i); end; result[2]:=':='; //while end; end. Könnt ihr mir da helfen? Wär echt super! Bye! Fee |
Re: Zuweisungsscanner????
wies aussieht könnt ihr mir da auch nicht weiterhelfen..... trotzdem danke
|
Re: Zuweisungsscanner????
ich glaub du gehst das ganze bischen falsch an... gehe den gesammtstring per schleife, zeischen für zeischen durch und sobald von buchstaben zu zahlen, zahlen zu operator etc. wechselt stopfst du das bisher gelesene in die liste.
|
Re: Zuweisungsscanner????
hört sich logisch an aber wie soll ich das bitte machen?
|
Re: Zuweisungsscanner????
warte mal ca. ne viertel stunde dann hab ich das fertig
|
Re: Zuweisungsscanner????
du kannst mit s[i] mit i € IN; i >= 1 auf die einzelnen Zeichen eines strings zuweisen. wenn du das ganze in ner for schleife ablaufen lässt, kriegst du eins nach dem anderen.
wenn dir das nicht reicht, kriegst du gerne code von mir, wie ich das mal gemacht habe. EDIT: formulierung geändert. |
Re: Zuweisungsscanner????
So siehts aus:
Delphi-Quellcode:
beispielaufruf:
procedure doit(AStr: String; ADestList: TStrings);
type TCharType = (ctZahl, ctBuchstabe, ctOther); function LGetCharType(AChar: Char): TCharType; begin if pos(AChar, '1234567890') > 0 then result := ctZahl else if pos(AnsiLowerCase(AChar), 'abcdefghijklmnopqrstuvwxyz') > 0 then result := ctBuchstabe else result := ctOther; end; var LTmpStr: String; LCurrType, LType: TCharType; LCount: Integer; begin AStr := StringReplace(AStr, ' ', '', [rfReplaceAll]); if (AStr <> '') then begin LTmpStr := ''; LCurrType := LGetCharType(AStr[1]); for LCount := 1 to length(AStr) do begin LType := LGetCharType(AStr[LCount]); if LType <> LCurrType then begin if LTmpStr <> '' then begin ADestList.Add(LTmpStr); LTmpStr := ''; end; LCurrType := LType; end; LTmpStr := LTmpStr + AStr[LCount]; end; if LTmpStr <> '' then ADestList.Add(LTmpStr); end; end;
Delphi-Quellcode:
var LDestList: TStringList;
begin LDestList := TStringList.Create; doit('anna:=34 + jojo;', LDestList); ShowMessage(LDestList.Text); LDestList.Free; |
Re: Zuweisungsscanner????
wow, danke sir tom... (vergessen ^^)
ich muss kurz weg, bin um neun wieder da, danke danke danke danke danke danke!!!!!! :hello: |
Re: Zuweisungsscanner????
das ganze kannst du kürzer auch haben.....
(und weniger c&p verdächtig)
Delphi-Quellcode:
EDIT: für den in operator liebe ich delphi.......
type TCharSet:set of char; // eine Menge von Zeichen
function explode(s:string; chars:TCharSet); var i:integer; begin for i := 1 to length(s) do //den ganzen string durchlaufen if s[i] in chars then handle(i,s[i]); //wenn gefunden, dann index und character an handler übergeben. end; procedure handle(index:Integer;character:char); begin showmessage('am index ' + inttostr(i) + ' trat der char '+ character + ' auf.'); //Dialogbox mit Index und Character ausgeben // hier irgendwas machen. zum besipiel die zuweisung auflösen. end; |
Re: Zuweisungsscanner????
@DGL-luke: Dir ist aber schon aufgefallen das es nicht ein einzelnes zeischen ist was die verschiedenen teile von einander trennt?!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz