Seite 1 von 2
RTrim kürzt nicht
Verfasst: 06.06.2017 20:33
von thinkitsimple
Ich möchte alle Zeichen eines Strings löschen, die ab einem bestimmten Zeichen vorhanden sind.
Hier möchte ich nur den Computer.
Habe RTrim, RemoveString und Trim probiert, komme damit aber nicht zum gewünschten Ziel.
Wie kann ich das realisieren?
Re: RTrim kürzt nicht
Verfasst: 06.06.2017 20:36
von RSBasic
Kannst du bitte deinen RTrim-Code posten, der nicht funktioniert?
Du sagst leider auch nicht, welche Zeichen entfernt werden sollen. Willst du "Computer" entfernen oder alle Zeichen (beliebige Zeichen) bis zum Punkt-Zeichen?
Re: RTrim kürzt nicht
Verfasst: 06.06.2017 20:38
von man-in-black
Hi,
guck dir mal stringfield an.
MFG
MIB
Re: RTrim kürzt nicht
Verfasst: 06.06.2017 20:52
von thinkitsimple
RSBasic hat geschrieben:Kannst du bitte deinen RTrim-Code posten, der nicht funktioniert?
Du sagst leider auch nicht, welche Zeichen entfernt werden sollen. Willst du "Computer" entfernen oder alle Zeichen (beliebige Zeichen) bis zum Punkt-Zeichen?
Ich möchte .Domain entfernen.
Ich habe folgendes probiert:
Damit wird aber nur der Punkt entfernt. Ich möchte aber alles ab dem Punkt nach rechts entfernen.
Re: RTrim kürzt nicht
Verfasst: 06.06.2017 20:56
von RSBasic
Ist dieser String immer gleich? Also immer nur mit einem Punkt? Wenn ja, dann kannst du mit StringField() arbeiten:
Code: Alles auswählen
EnableExplicit
Define device.s = "Computer.Domain"
Debug StringField(device, 1, ".")
Wenn nicht:
Code: Alles auswählen
EnableExplicit
Define device.s = "Computer.Domain"
Debug Mid(device, 1, Len(device)-FindString(ReverseString(device), "."))
Re: RTrim kürzt nicht
Verfasst: 06.06.2017 21:43
von GPI
thinkitsimple hat geschrieben:Ich möchte .Domain entfernen.
Ich habe folgendes probiert:
Damit wird aber nur der Punkt entfernt. Ich möchte aber alles ab dem Punkt nach rechts entfernen.
Äh, lies dir bitte die Anleitung durch.
Die TRIM-Befehle entfernt alle Stellen von anfang/ende, die mit einen bestimmten Zeichen identisch sind. Damit kann man bspw. führende Leerzeichen entfernen, ist sogar der klassische Anwendungsfall.
Ansonsten schau dir mal RSBasics beispiel an, ich nehm für sowas gerne StringField().
Re: RTrim kürzt nicht
Verfasst: 06.06.2017 21:45
von thinkitsimple
RSBasic hat geschrieben:Ist dieser String immer gleich? Also immer nur mit einem Punkt? Wenn ja, dann kannst du mit StringField() arbeiten:
Code: Alles auswählen
EnableExplicit
Define device.s = "Computer.Domain"
Debug StringField(device, 1, ".")
Das klappt. Prima. Ja, der String hat immer nur einen Punkt.
Neues Problem:
Das klappt unter Windows:
Code: Alles auswählen
RunProgram("curl\i386\curl.exe", "https://dweet.io/dweet/for/" + device.s + "?hello=world", GetCurrentDirectory(), #PB_Program_Hide)
Unter macOS klappt das nur, wenn ich den Parameter für RunProgram nicht dynamisch erzeuge.
1. Beispiel (klappt nicht):
Code: Alles auswählen
RunProgram("curl", "https://dweet.io/dweet/for/" + device.s + "?hello=world", GetCurrentDirectory(), #PB_Program_Hide)
2. Beispiel (klappt):
Code: Alles auswählen
RunProgram("curl", "https://dweet.io/dweet/for/MeinDevice?hello=world", GetCurrentDirectory(), #PB_Program_Hide)
Eine Idee, warum das unter macOS nicht klappt?
Quote-Tags repariert, -- A.
Re: RTrim kürzt nicht
Verfasst: 06.06.2017 22:59
von Kiffi
das hier funktioniert zumindest unter Linux:
Code: Alles auswählen
EnableExplicit
Define myUniqueName.s
Define *Buffer, Size
InitNetwork()
myUniqueName.s = "PeterLovesPureBasic"
ReceiveHTTPMemory("https://dweet.io/dweet/for/" + myUniqueName + "?Hello=PureBasic&Timestamp=" + Str(Date()))
*Buffer = ReceiveHTTPMemory("https://dweet.io/get/latest/dweet/for/" + myUniqueName)
If *Buffer
Size = MemorySize(*Buffer)
Debug "Content: " + PeekS(*Buffer, Size, #PB_UTF8 | #PB_ByteLength)
FreeMemory(*Buffer)
Else
Debug "Failed"
EndIf
Ansonsten mal schauen, was bei Dir in 'device.s' steht. Könnte sein, dass da ein Sonderzeichen drinsteht.
Grüße ... Peter
Re: RTrim kürzt nicht
Verfasst: 06.06.2017 22:59
von Bisonte
thinkitsimple hat geschrieben:Neues Problem:
Das klappt unter Windows:
Code: Alles auswählen
RunProgram("curl\i386\curl.exe", "https://dweet.io/dweet/for/" + device.s + "?hello=world", GetCurrentDirectory(), #PB_Program_Hide)
Unter macOS klappt das nur, wenn ich den Parameter für RunProgram nicht dynamisch erzeuge.
1. Beispiel (klappt nicht):
Code: Alles auswählen
RunProgram("curl", "https://dweet.io/dweet/for/" + device.s + "?hello=world", GetCurrentDirectory(), #PB_Program_Hide)
2. Beispiel (klappt):
Code: Alles auswählen
RunProgram("curl", "https://dweet.io/dweet/for/MeinDevice?hello=world", GetCurrentDirectory(), #PB_Program_Hide)
Eine Idee, warum das unter macOS nicht klappt?
Unter bestimmten Umständen (die mir nicht bekannt sind) ist das auch unter Windows so.
Ich habe mir daher angewöhnt : Erst die Strings für die Parameter zusammenbauen und dann RunProgram aufrufen. Das klappt dann
eigentlich immer.
Re: RTrim kürzt nicht
Verfasst: 07.06.2017 14:25
von thinkitsimple
Kiffi hat geschrieben:
Ansonsten mal schauen, was bei Dir in 'device.s' steht. Könnte sein, dass da ein Sonderzeichen drinsteht.
Grüße ... Peter
Danke. Das war es. Im Computernamen gab es einen Bindestrich, das mochte macOS offensichtlich nicht.
Das Ganze sieht jetzt so aus:
Code: Alles auswählen
; sends some device informations to dweet.io
; read last message from your device on https://dweet.io/get/latest/for/your_device_name
; read all messages from your device on https://dweet.io/get/dweets/for/your_device_name
device.s = StringField(ComputerName(), 1, ".") ; remove everything after computername eg .domain
device.s = RemoveString(device.s, "-") ; remove hyphen (-)
device.s = UCase(device.s) ; convert device.s to uppercase
cURLParam.s = "https://dweet.io/dweet/for/" + device.s + "?hello=world"
Debug(device.s)
Debug(cURLParam.s)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
RunProgram("curl\i386\curl.exe", cURLParam.s, GetCurrentDirectory(), #PB_Program_Hide)
CompilerCase #PB_OS_MacOS
RunProgram("curl", cURLParam.s, GetCurrentDirectory(), #PB_Program_Hide)
CompilerEndSelect