Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - pos funktion (MAC-Adresse in Text-Datei finden)


delphia1029 - So 30.08.09 22:03
Titel: pos funktion (MAC-Adresse in Text-Datei finden)
hi leute,

ich habe mit einen CMD Befehl (ipconfig /all) eine Text-Datei gefüllt. Nun will ich die MAC-Adressen auslesen, aus der Textdatei. Die Funktion POS wurde mir geraten, aber ich bekomme es einfach nicht hin.


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am So 30.08.2009 um 23:16
Moderiert von user profile iconNarses: Titel erweitert.


jaenicke - So 30.08.09 22:06

Hallo und :welcome: ! ;-)

Was ist denn genau das Problem? Verstehst du Pos nicht? Klappt etwas nicht?

Zeig doch am besten einmal was du bereits an Code hast, das würde es etwas einfacher machen zu helfen.

Ganz allgemein würde ich eher die Adressen direkt auslesen statt den Umweg über die DOS-Funktion zu gehen und dann auch noch eine Datei zur Zwischenspeicherung zu benutzen.


delphia1029 - So 30.08.09 22:09

hallo danke für die schnelle meldung!

kann man das direkt auslesen? können sie mir da eine kurze Hilfe dazu geben.

Hier mein Code (hinfällig, wenn andere Lösung besser ist)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var ld    : TStringList;
    s     : String;
    Position : Integer;

begin
  ld := TStringList.Create;
  ld.LoadFromFile('C:\LTO\gma.txt');
  Position := Pos('Physikalische Adresse . . . . . . : ',ld);
  if Position<>0 then Label3.Caption:=IntToStr(Position);

end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


jaenicke - So 30.08.09 22:13

Dafür gibt es hier etwas in der Library:
http://www.delphi-library.de/viewtopic.php?p=7877 ;-)

Zu deinem Quelltext:
Pos funktioniert nur mit Strings. Also mit einer Zeile der StringList oder dem gesamten Text der StringList, aber nicht mit dem Objekt (der StringList) selbst.


Boldar - So 30.08.09 22:15

Das hier ermittelt die mac-Adresse direkt:

Moderiert von user profile iconNarses: Code entfernt, da in der Library enthalten, siehe Link im folgenden Beitrag.

//Edit: Mist, zu langsam...
Aber das hier ist einfacher, da nur 1 Aufruf, ermittelt aber nur die primäre Mac-Adresse.


jaenicke - So 30.08.09 22:18

Allerdings im Gegensatz zu der oben verlinkten Funktion nur eine Adresse. Gibt also Probleme, wenn (wie heute üblich) mehrere Netzwerkadapter vorhanden sind.
// EDIT:
Nein, bei mir kommt nicht "die primäre" (wie entscheidest du das?) heraus, sondern eine emulierte. ;-)

Zudem gibt es die von dir gepostete Funktion übrigens auch in der Library [http://www.delphi-library.de/viewtopic.php?p=390] hier, du hättest diese also auch einfach verlinken können statt sie komplett zu posten.


delphia1029 - So 30.08.09 22:31

hallo, danke habe jetzt deinen code verwendet. bekomme jedoch eine Fehlermeldung: Imkompatible Typen AnsiChar und Char


jaenicke - So 30.08.09 22:33

Dann benutzt du vermutlich Delphi 2009 oder 2010? Es könnte reichen ggf. den Typ Char durch AnsiChar zu ersetzen oder so etwas. Ich kann es aber leider im Moment nicht testen. Was steht denn in der Zeile?


delphia1029 - So 30.08.09 22:36


Delphi-Quelltext
1:
NCB.ncb_lana_num := Char(AdapterID);                    


Fehlermeldung: [DCC Fehler] step1.pas(57): E2010 Inkompatible Typen: 'AnsiChar' und 'Char'

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

hey habe es jetzt gegen AnsiChar ausgetauscht und es funktioniert einwandfrei!! dankeschön.

wodurch kommt es,dass Delphi 2009 Char nicht mehr akzeptiert?


jaenicke - So 30.08.09 22:38

Versuch am besten einmal das:

Delphi-Quelltext
1:
NCB.ncb_lana_num := AnsiChar(AdapterID);                    


// EDIT:
Das liegt daran, dass bei Delphi bis 2007 ein String ein AnsiString war und ein Char ein AnsiChar. Ab Delphi 2009 jedoch ist ein String ein UnicodeString und ein Char ein Char mit einem Unicodezeichen und nicht mehr nur einem Byte. Dadurch gibt es dann solche kleinen Inkompatibilitäten, die man durch die Verwendung von AnsiChar usw. umgehen kann.
Aber eben nur, wenn man Unicode nicht braucht, was in diesem Fall ja der Fall ist.