Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eine "schöne" Lösung ohne Format (https://www.delphipraxis.net/110838-eine-schoene-loesung-ohne-format.html)

Desmulator 25. Mär 2008 17:04


Eine "schöne" Lösung ohne Format
 
Hallo Leute,
also es geht darum , dass ich die Unit SysUtils so weit wie mödlich mir ersparen möchte, deshalb suche ich nach einer möglichkeit folgendes Problem ohne Format oder IntToStr zu lösen:

Delphi-Quellcode:
function LookupDomain(const Domain : String ) : String;
var
  Host : PHostEnt;
  Addr : array[0..3] of String;
begin
  { Host-Daten einholen }
  Host := GetHostByName(PChar(Domain));
  { Die Adresse formaieren }
  Result := Format('%d.%d.%d.%d', [Ord(Host.h_addr^[0]),
                                   Ord(Host.h_addr^[1]),
                                   Ord(Host.h_addr^[2]),
                                   Ord(Host.h_addr^[3])]);
end;
Es egth darum die 4 Wert zu eine gültigen IP zusammen zu fassen , ohne die Unit SysUtils zu verwenden.

Danke für die hilfe^^

DeddyH 25. Mär 2008 17:08

Re: Eine "schöne" Lösung ohne Format
 
Versuch es doch mal mit Concat und Val.

Desmulator 25. Mär 2008 17:22

Re: Eine "schöne" Lösung ohne Format
 
Hm... Okay mit Concat kann ich die einzellstrings zusammen fügen, aber mit val kann ich nur ein string in ein integer umwandeln...
Wie hast du dir das vorgestellt?

DeddyH 25. Mär 2008 17:24

Re: Eine "schöne" Lösung ohne Format
 
Sry, hatte Val mit Str verwechselt :oops:

Desmulator 25. Mär 2008 17:29

Re: Eine "schöne" Lösung ohne Format
 
Jop thx,

nochmal für alle :
Delphi-Quellcode:
function LookupDomain(const Domain : String ) : String;
var
  Host : PHostEnt;
  Addr : array[0..3] of String;
  Test,Test2 : Integer;
begin

  { Host-Daten einholen }
  Host := GetHostByName(PChar(Domain));
  { Die Adresse formaieren }
  Str(Ord(Host.h_addr^[0]), Addr[0]);
  Str(Ord(Host.h_addr^[1]), Addr[1]);
  Str(Ord(Host.h_addr^[2]), Addr[2]);
  Str(Ord(Host.h_addr^[3]), Addr[3]);
  { Zusammen setzen }
  Result := Concat(Addr[0],'.',Addr[1],'.',Addr[2],'.',Addr[3]);
end;
Edit : Hach, is das ein schöne gefühl SysUtils aus der uses zu löschen 8)

rawsoul 25. Mär 2008 18:02

Re: Eine "schöne" Lösung ohne Format
 
Wieviel kb sparst du damit in der Echse zirka ein?

Desmulator 25. Mär 2008 21:06

Re: Eine "schöne" Lösung ohne Format
 
es geht mir nicht um die kb sondern darum nicht die SysUtils zu verwenden... ich mag nicht so gerne sachen von anderen leuten benutzen, ich mach lieber alles selber...

aber weil du es bist :-)
ohne : 93.696 Bytes
mit : 93.696 Bytes
;-)

3_of_8 25. Mär 2008 21:11

Re: Eine "schöne" Lösung ohne Format
 
Dafür ist die SysUtils.pas optimiert bis zum gehtnichtmehr, und dein Code vermutlich nicht. (Okay, bei Val, Str usw. ist es was anderes, die kommen ja auch aus der System.pas)

Aber warum willst du die nicht verwenden, ich meine, du darfst sie ja uneingeschränkt verwenden.

Luckie 25. Mär 2008 21:13

Re: Eine "schöne" Lösung ohne Format
 
Zitat:

Zitat von Desmulator
es geht mir nicht um die kb sondern darum nicht die SysUtils zu verwenden... ich mag nicht so gerne sachen von anderen leuten benutzen, ich mach lieber alles selber...

Hast du die Windows.pas und WinSock.pas auch schon selber geschrieben?

Desmulator 25. Mär 2008 21:29

Re: Eine "schöne" Lösung ohne Format
 
:wink:


öhm des ist stupide arbeit, bei der man ja nicht wirklich was lernen kann... es geht mir auch um den lern effeckt... und dlls kann ich einbinden^^

RavenIV 26. Mär 2008 08:41

Re: Eine "schöne" Lösung ohne Format
 
Zitat:

Zitat von Desmulator
es geht mir nicht um die kb sondern darum nicht die SysUtils zu verwenden... ich mag nicht so gerne sachen von anderen leuten benutzen, ich mach lieber alles selber...

aber weil du es bist :-)
ohne : 93.696 Bytes
mit : 93.696 Bytes
;-)

Meine Meinung dazu:

a) da das Programm nicht kleiner wird, wird die SysUtils vermutlich irgendwo "automatisch" eingebunden. Vielleicht von einer anderen Unit.

b) ich finde es sinnlos, schon bestehende Dinge nachzuprogrammieren.
Verwende Deine zeit lieber für sinnvolle Sachen.
Auch dabei kannst Du was lernen.

c) die SysUtils kommt von Borland / CodeGear. Da brauchst Du leine Angst haben, dass die etwas nicht vorhergesehenes machen. Bei Fremdkomponenten sieht es anderst aus. Da will ich den Sourcecode anschauen können, damit ich sehe, was passiert. Aber nachprogrammieren würde ich das bestimmt nicht.

StInkeSchuh 26. Mär 2008 09:16

Re: Eine "schöne" Lösung ohne Format
 
Die SysUtils kann man aus der USES-Liste raushauen, zur Laufzeit wird die aber automatisch mit eingebunden, weil Delphi das so "verlangt" (ein anderer Ausdruck ist mir nicht eingefallen).

Da der Sourcecode von Delphi aber nur gelesen (und der fehlende Verweis auf SysUtils somit ebenfalls erkannt, aber nicht korrigiert wird) und compiliert wird, kann Delphi diesen Fehler im Source nicht korrigieren, und somit wird die Unit zur Laufzeit von Delphi sowieso in die EXE reingeschnitten.
Würde Delphi Fehler automatisch korrigieren, gäbe es ja das nicht:
Delphi-Quellcode:
[Fehler] Unit1.pas(28): Inkompatible Typen: 'String' und 'Integer'
Delphi würde es ja korrigieren.

Deshalb ist es ja:
Zitat:

es geht mir nicht um die kb sondern darum nicht die SysUtils zu verwenden... ich mag nicht so gerne sachen von anderen leuten benutzen, ich mach lieber alles selber...

aber weil du es bist
ohne : 93.696 Bytes
mit : 93.696 Bytes
Weil Ohne Eintrag in USES die mit eingebunden wird und Mit Eintrag denke ich ist es logisch was dann mit der Unit passiert... :wink:
Im Prinzip ist dies dass selbe was RavenIV ausdrücken wollte, nur habe ich es näher erklärt.

Hoffe ich konnte helfen,

mfg St!nkeSchuh

Daniel 26. Mär 2008 09:23

Re: Eine "schöne" Lösung ohne Format
 
Zitat:

Zitat von StInkeSchuh
Die SysUtils kann man aus der USES-Liste raushauen, zur Laufzeit wird die aber automatisch mit eingebunden, weil Delphi das so "verlangt" (ein anderer Ausdruck ist mir nicht eingefallen).

Das ist leider falsch. Setzen. ;-)
Du verwechselst dies mit der Unit 'System'. Die ist automatisch immer mit von der Partie. Die Unit SysUtils musst Du aber einbinden wie jede andere Unit auch, wenn Du die darin enthalteten Funktionen nutzen möchtest. Ein Minimal-Programm wie das Folgende kommt gänzlich ohne die SysUtils.pas aus - und es läuft sogar erfreulich stabil:

Delphi-Quellcode:
program Project3;
begin
  writeln( 'wuppdi' );
end.
Zitat:

Zitat von StInkeSchuh
Im Prinzip ist dies dass selbe was RavenIV ausdrücken wollte, nur habe ich es näher erklärt.

... und ein bisschen falsch ist es auch noch geworden. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz