Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DarkLord
Anmeldungsdatum: 26.03.2005 Beiträge: 70 Wohnort: Rhade^^ oben bei muddi
|
Verfasst am: 03.04.2005, 14:59 Titel: 2 Probs ( Namen des PCs, bestimmte zeichen auslesen) |
|
|
Hi,
ich habe wieder zwei kleine Probleme…
1. )
Gibt es eine Möglichkeit den PC-Namen durch QBasic zu ändern?
2.)
Ich will aus einer Datei eine Zeile auslesen… aus der aber nur die letzten 11-15 Zeichen. Es ist eine String Variable (also Zeichen *g*).
Ich weiß zwar wie man die Zeile in den Speicher bzw. in eine Variable lädt aber wie bekomm ich davon nur die letzten 11-15 Zeichen? Diese sind aber auch die letzten Zeichen in der Variablen bzw. in der Datei.  |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 03.04.2005, 15:04 Titel: |
|
|
Die letzten 15 Zeichen eines Strings bekommst du mit
Code: |
NeuerString$ = RIGHT$(UrspruenglicherString, 15)
|
Ein Programm, das nur die letzten 10 Zeichen der Zeilen in einer Datei ausgibt, sähe
so aus:
Code: |
channel = FREEFILE
OPEN "C:\TEST.TXT" FOR INPUT AS #channel
DO UNTIL EOF(channel)
LINE INPUT #channel, Zeile$
PRINT "Die letzten 10 Zeichen: "; RIGHT$(Zeile$, 10)
LOOP
CLOSE #channel
|
jb |
|
Nach oben |
|
 |
DarkLord
Anmeldungsdatum: 26.03.2005 Beiträge: 70 Wohnort: Rhade^^ oben bei muddi
|
Verfasst am: 03.04.2005, 15:10 Titel: |
|
|
danke... jetzt kann ich weiter schreiben^^
fehlt nur noch ne antwort zu 1......aber bei euch habe ich da (eigentlich ) keine bedenken |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 03.04.2005, 15:38 Titel: Zu 1) |
|
|
Wahrschneilich wenn du NT oder XP hast, kannst du das über "net" oder "net name" irgendwie machen.
Starte einfach "cmd.exe" und Probiere etwas aus in dem du einfach den Befehl "Net" eingiebst. |
|
Nach oben |
|
 |
DarkLord
Anmeldungsdatum: 26.03.2005 Beiträge: 70 Wohnort: Rhade^^ oben bei muddi
|
Verfasst am: 03.04.2005, 16:06 Titel: |
|
|
also den befehl net computer, schätze mal mit dem, allerdings weiß ich nicht genau wie man DEN einsetzen soll^^
Ich habe XP falls du das noch wissen willst *g* |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 03.04.2005, 16:10 Titel: |
|
|
DarkLord hat Folgendes geschrieben: |
allerdings weiß ich nicht genau wie man DEN einsetzen soll
|
Einfach "net computer" eingeben und die Syntax anschauen.
jb |
|
Nach oben |
|
 |
DarkLord
Anmeldungsdatum: 26.03.2005 Beiträge: 70 Wohnort: Rhade^^ oben bei muddi
|
Verfasst am: 03.04.2005, 16:16 Titel: |
|
|
Habe ich... ging aber erst nicht was ich eingegeben habe^^ ist der befehl aber nicht.. denn jetzt (nachdem ich es richtig habe) steht da: Dieser Befehl kann nur auf Windows-Domänencontrollern ausgeführt werden.
Schade... ich such später einfach mal weiter.. danke trotzdem |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 03.04.2005, 17:41 Titel: |
|
|
Normalerweise liefert einem
Code: | net config workstation |
die aktuellen NetBIOS-Einstellungen wie PC-Name, Arbeitsgruppe/Domäne sowie gerade eingeloggter Windows-Benutzer, und dies funktioniert von WfW 3.11 bis XP durchgehend überall mit jeder Windows-Version. :-)
Zum Setzen des Rechnernamens (gedenkst Du einen Unattended Setup aufzubauen?) sind aus meiner Sicht zwei Ansätze denkbar:
1.) Mittels VBScript und SendKeys() Tasteneingaben an den vorher mit SHELL gestarteten "Systemsteuerung"/"System"-Prozess senden
2.) Direkt mit REGEDIT die zugehörigen Schlüssel modifizieren. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 03.04.2005, 18:00 Titel: |
|
|
Kurz nochmal zu dem Datei-Lesen-Problem: die angebotene Lösung funktioniert zwar, eleganter weil schneller is aber so was:
Code: |
chanel = FREEFILE
OPEN dateiname$ FOR BINARY AS #chanel
l = LOF(chanel)
adr = l - 15
lese$ = SPACE$(15)
GET #chanel, adr, lese$
CLOSE #chanel
|
Und wozu musst du den Computernamen ändern?
Wenns nur ne Temporäre Änderung sein darf, empfehle ich dir, einfach die Umgebungsvariablen zu ändern:
Code: |
SHELL "SET USERNAME=" + NeuerName$
|
Muss aber bei jedem Neustart neu gemacht werden, die Umgebungsvariablen werden bei jedem Reset neu initiiert. _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 03.04.2005, 20:02 Titel: |
|
|
@Dusky_Joe: Deine Lösung funktioniert aber nur beim Lesen der ersten Zeile.
EDIT: Muss da nicht vor
auch noch
Code: |
DIM lese AS STRING * 15
|
stehen?
Wobei dann das $ nach lese wegfallen würde.
jb |
|
Nach oben |
|
 |
DarkLord
Anmeldungsdatum: 26.03.2005 Beiträge: 70 Wohnort: Rhade^^ oben bei muddi
|
Verfasst am: 03.04.2005, 21:02 Titel: |
|
|
@ dreael
Also, ich will das man eine Nachricht verschciken kann (über net send), und da ich weiß das der Absender der PC Name ist, wollte ich den so vorher speichern, dann ändern, dann nachricht senden, und dann wieder zurück ändern^^.
Du sagts mit Regedit? Welcher schlüssel ist das... ich habe meinen PC-Namen gesucht (ist der verschlüsselt?) aber nix gefunden. Du weißt nicht zufällig wie der heißt?
Mit VBS kenn ich mich leider nicht aus... sonst wäre das sicher ne gute idee *g*. Lerne aber gerne, falls du seiten mit kleinen tuts für vbs kennst.
@ all
Aber ich habe das was jb mir gesagt hat ausprobiert, und es klappt (die letzten 15 Zeichen eines Strings bekommst du mit...).
Aber jetzt habe ich ein anderes problem.. (habe zwar ein anderes gelöst aber dadurch ist folgendes entstanden):
Ich will das in einer Datei alles geordnet aufgelistet ist, so, der benutzer kann da eigne dinge reinschreiben, den namen z.b.
Es soll allerdings alles folgendermaßen in der Datei gespeichert werden:
NAME: der name, max 10 zeichen ; IP: Dann hier die IP
so, allerdings soll alles auch den richtigen abstand haben also:
NAME: 1234567890 ; IP: 192.168.100.100
So in der art soll das in der Datei gespeicher werden. Allerdings soll, wenn der Name kürzer als 10 Zeichen sit trotzdem an einem bestimmten punkt anfangen mit IP. Ich wollte das mit locate lösen, allerdings habe ich gemerkt dass das in einer Datei nicht geht (oder ich habe es falsch gemacht). Wie kann man das also machen das in splte 19
" ; IP: 192.168.100.100" steht? |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 04.04.2005, 15:38 Titel: |
|
|
Versuch mal das:
Code: |
OPEN "C:\TEST.TXT" FOR OUTPUT AS #1
REM Die Eingaben:
LINE INPUT "Name --> "; Name$
LINE INPUT "IP --> "; IP$
REM Anführende und abschließende Leerzeichen werden entfernt:
Name$ = RTRIM$(LTRIM$(Name$)
IP$ = RTRIM$(LTRIM$(IP$))
REM Wenn der Name länger als 10 Buchstaben ist, werden die restlichen Buchstaben
REM abgeschnitten:
IF LEN(Name$) > 10 THEN Name$ = LEFT$(Name$, 10)
REM Das selbe für die IP, allerdings mit Maximallänge = 15:
IF LEN(IP$) > 15 THEN IP$ = LEFT$(IP$, 15)
REM Wenn der Name/die IP kürzer als 10/15 ist, werden Leerzeichen angefügt:
IF LEN(Name$) < 10 THEN Name$ = Name$ + STRING$(10 - LEN(Name$), " ")
IF LEN(IP$) < 15 THEN IP$ = IP$ + STRING$(15 - LEN(IP$), " ")
REM Jetzt wird's in die Datei geschrieben.
PRINT #1, "NAME: "; Name$; "; IP: "; IP$
CLOSE #1
|
Da kommen jetzt sehr viele Stringmanipulationen zum Einsatz, die die QuickBASIC Onlinehilfe
aber sehr gut erklärt.
Wenn dennoch was nicht klar ist, einfach fragen!
EDIT: Hab aber soooo viel Zeit, also:
ermittelt die Länge eines Strings.
Bsp:
Code: |
LINE INPUT Name$
PRINT "Der Name hat "; LEN(Name$); " Zeichen!"
|
Wie man bei dem Beispiel sehen kann, haben Zahlen aller dings immer ein
führendes Leerzeichen, das für negative Zahlen gedacht ist, da ja dann ein
Minus davor stehen muss.
Da gibt es eine nette kleine Funktion:
Diese Funktion schneidet alle führenden Leerzeichen ab.
hingegen schneidet - wer hätte das gedacht - die abschließenden Leerstellen ab.
Bsp:
Code: |
LINE INPUT "Geben sie einen Namen mit führenden und abschließenden Leerzeichen ein --> "; Name$
PRINT "Der Name ohne führende und abschließende Leerzeichen: "; RTRIM$(LTRIM$(Name$))
|
Wie ich zuvor bereits sagte, kann man die rechten Zeichen eines Strings seperat darstellen, und zwar mit
Dabei ist n die Position im Wort, ab dem es nach rechts dargestellt werden soll.
Das Gegenstück dazu ist
Nur ist da alles nach links bezogen.
Dann gibt es noch die Funktion
Diese Funktion dient dazu, das Zeichen z n-mal zurückzuliefern.
Bsp:
Code: |
PRINT "20mal das Zeichen *"
PRINT STRING$(20, "*")
|
Alternativ kann man anstatt z auch den ASCII-Code des Zeichens z abgeben.
OK, Kurs zu Ende.
jb |
|
Nach oben |
|
 |
DarkLord
Anmeldungsdatum: 26.03.2005 Beiträge: 70 Wohnort: Rhade^^ oben bei muddi
|
Verfasst am: 04.04.2005, 17:09 Titel: |
|
|
EDIT:
Danke, ich habe es mir gerade angeguckt. (habe aber ein fehler gefunden *g* ein ) fehlte^^) Und ich muss sagen das es richtig gut ist.. ich werde das warscheinlich so übernehmen
EDIT 2:
Funktionier alles bestens. Habe noch ein bissle geändert. Danke (puh wie oft habe ich hier schon danke gesagt *g*()
danke^^
ich guck mir das nachher an, da ich gleich wieder weg muss^^
Und ich frage nach wenn ich was nicht versteh, darauf kannste dich verlassen (will ja was lernen), aber ich guck erst in die MonFAQ falls es da nicht steht^^
_____________________
Danke für diese tolle Community, selten erlebt
|
|
Nach oben |
|
 |
|