Benötige kleine Hilfe mit String-Operation :-)

Zusatz-Programme für Receiver der 5000er und 6000er Serie.

Hier geht's um alles, was mit den TAP Anwendungen für den PVR5x00/6000 zu tun hat.
Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

Benötige kleine Hilfe mit String-Operation :-)

#1

Beitrag von Elle4u » Sa 25. Mär 2006, 19:35

Hallo,

ich benötige mal Eure Hilfe zwecks einer String-Operation. :oops:

Ich möchte von einem String 4 Zeichen abschneiden und danach noch ein Leerzeichen anfügen:

Code: Alles auswählen

NameBuffer[strlen(NameBuffer) - 4] = 0;

//Leerzeichen anhängen
NameBuffer[strlen(NameBuffer)] = ' ';
NameBuffer[strlen(NameBuffer)] = 0;
Nun passier aber folgendes:

Aus dem String "Hallo.rec" wird:
"Hallo"
"Hallo rec"
"Hallo rec"

Wie kann ich verhindern, daß nach Anfügen des Leerzeichens wieder die Extension da ist?
Ich könnte natürlich über eine erneute Variable gehen aber das finde ich etwas übertrieben...

Danke für Eure Tips!
Zuletzt geändert von Elle4u am Sa 25. Mär 2006, 20:17, insgesamt 1-mal geändert.
Gruß,
Elle4u

Benutzeravatar
Bonni
Guru in perpetuum
Guru in perpetuum
Beiträge: 8212
Registriert: Fr 9. Dez 2005, 18:37
Wohnort: Hamm (Westf.)
Receivertyp: SRP-2401 CI+ eco / VU+ Ultimo 4k
Receiverfirmware: TF-BPCE 1.03.00
Wohnort: Hamm (Westf.)

#2

Beitrag von Bonni » Sa 25. Mär 2006, 20:02

Geht das? Aber auch übertrieben...

for (i=1;i<5;i++){
NameBuffer[strlen(NameBuffer) -i] = 0;
}
Gruß Bonni


90cm-Schüssel + 2 Quattro LNB + TELEKA SAM 2294N Multiswitch 9:4 (seit 08/1998!)
VU+ Ultimo 4k (seit 05/2020) mit 2x DVB-S2X FBC Twin Tuner, 1x DVB-T2 Dual Tuner, SmartEPGvu+, PlutoTV, uvm.
SRP-2401 CI+ Eco (seit 10/2017) mit SmartEPG_TMS, TAPtoDate, WebControl, uvm. - läuft noch hier und da im "Kinderzimmer"
TF5000PVR (seit 09/2003) mit USB Accelerator, ImproBox, PowerRestore, iTiNa - im September 2024 voll funktionstüchtig vom Strom getrennt.
TF5000CI (seit 06/2005) - früher im Kinderzimmer, jetzt ausgemustert im Keller, bald Elektroschrott

cms
Topfversteher
Topfversteher
Beiträge: 373
Registriert: Mi 14. Dez 2005, 17:12
Receivertyp: VDR, 5000MP
Receiverfirmware: 5.13.62 20070808
Wohnort: Rhein-Main

#3

Beitrag von cms » Sa 25. Mär 2006, 20:33

Code: Alles auswählen

NameBuffer[strlen(NameBuffer) - 4] = ' ';
NameBuffer[strlen(NameBuffer) - 3] = \0;
Ist aber nicht gut:
strlen sucht 2x den string ab.
strings der Länge kleiner 3?

Code: Alles auswählen

int n = strlen(NameBuffer);
if (n > 4) {
  *(NameBuffer+n-4) = ' ';
  *(NameBuffer+n-3) = \0;
}
Zuletzt geändert von cms am Sa 25. Mär 2006, 20:39, insgesamt 1-mal geändert.
ACL 3.16, 3PG 1.29, FastSkip
Panasonic TH-37PV71, Denon AVR-2307, Denon DVD-1730, Logitech Harmony 885, yaVDR 0.3

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#4

Beitrag von Elle4u » Sa 25. Mär 2006, 20:39

Das Problem ist, daß ich das Anhänger des Leerzeichens immer machen muß und das Kürzen nur manchmal...

Am Besten mache ich einfach eine Temp-Variable mit der aktuellen len und mache dann das Leerzeichen dazu und len+1 ist dann 0...
Gruß,
Elle4u

Benutzeravatar
Happy
TAP-Guru
TAP-Guru
Beiträge: 5718
Registriert: Fr 9. Dez 2005, 09:32
Receivertyp: TF4000-5500-6000-TMS
Wohnort: bei Karlsruhe
Kontaktdaten:

#5

Beitrag von Happy » Sa 25. Mär 2006, 20:49

Elle4u hat geschrieben:

Code: Alles auswählen

NameBuffer[strlen(NameBuffer) - 4] = 0;

//Leerzeichen anhängen
NameBuffer[strlen(NameBuffer)] = ' ';
NameBuffer[strlen(NameBuffer)] = 0;
Hallo,
das Problem ist mit der Zeile

Code: Alles auswählen

NameBuffer[strlen(NameBuffer)] = ' ' 
überschreibst du den zuvor gesetzten Nullterminator mit einem Leerzeichen.
Damit wird der alte Nullterminator hinter dem rec wieder aktiv.
Es wird also nur der . durch ein Leerzeichen ersetzt.

Folgendes sollte klappen:

Code: Alles auswählen

NameBuffer[strlen(NameBuffer) - 4] = 0;

//Leerzeichen anhängen
strcat(NameBuffer," ");
Gruß,
Happy
:type: Meine TAPs und Tools

TF5500 PVR (Fw Jan. 2007 P)- 400GB Samsung - AC light 1.05 - Yamaha RX-V 1500
- LAN: Asus WL-500g Deluxe mit ftpd-topfield 0.7.4
TAPs: Quicktimer, Autodelete, Standby, 3PG, Automove, NiceDisplay, PowerRestore, WSS Killer, Eurostirf, Overfly
TV: Sony KDL-46W4500
TF6000 PVR (Fw Okt. 2008)- 160GB Samsung SV1604N
TAPs: iTina, Autodelete, Automove, Autoresume, NiceDisplay, WSS Killer
SRP-2100 (Fw Okt. 2009)
TAPs: SmartEPG, ChangePreview, Autodelete, Automove, BackupSettings,RescueRecs, MySkip, NiceDisplay

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#6

Beitrag von Elle4u » Sa 25. Mär 2006, 20:51

Happy hat geschrieben:Folgendes sollte klappen:

Code: Alles auswählen

NameBuffer[strlen(NameBuffer) - 4] = 0;

//Leerzeichen anhängen
strcat(NameBuffer," ");
OK. Danke. Werde ich mal versuchen.

Folgendes hatte auch gerade funktioniert:

Code: Alles auswählen

//Leerzeichen anhängen
TAP_SPrint(NameBuffer, "%s%s", NameBuffer, " ");
Gruß,
Elle4u

Benutzeravatar
Happy
TAP-Guru
TAP-Guru
Beiträge: 5718
Registriert: Fr 9. Dez 2005, 09:32
Receivertyp: TF4000-5500-6000-TMS
Wohnort: bei Karlsruhe
Kontaktdaten:

#7

Beitrag von Happy » Sa 25. Mär 2006, 20:52

Elle4u hat geschrieben: Folgendes hatte auch gerade funktioniert:

Code: Alles auswählen

//Leerzeichen anhängen
TAP_SPrint(NameBuffer, "%s%s", NameBuffer, " ");
Ist aber vergleichsweise teuer :wink:

Gruß,
Happy
:type: Meine TAPs und Tools

TF5500 PVR (Fw Jan. 2007 P)- 400GB Samsung - AC light 1.05 - Yamaha RX-V 1500
- LAN: Asus WL-500g Deluxe mit ftpd-topfield 0.7.4
TAPs: Quicktimer, Autodelete, Standby, 3PG, Automove, NiceDisplay, PowerRestore, WSS Killer, Eurostirf, Overfly
TV: Sony KDL-46W4500
TF6000 PVR (Fw Okt. 2008)- 160GB Samsung SV1604N
TAPs: iTina, Autodelete, Automove, Autoresume, NiceDisplay, WSS Killer
SRP-2100 (Fw Okt. 2009)
TAPs: SmartEPG, ChangePreview, Autodelete, Automove, BackupSettings,RescueRecs, MySkip, NiceDisplay

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#8

Beitrag von Elle4u » Sa 25. Mär 2006, 20:56

Happy hat geschrieben:Ist aber vergleichsweise teuer :wink:
Das dachte ich mir. :wink:

Deine Lösung hat funktioniert. Danke :hello:
Gruß,
Elle4u

Benutzeravatar
Happy
TAP-Guru
TAP-Guru
Beiträge: 5718
Registriert: Fr 9. Dez 2005, 09:32
Receivertyp: TF4000-5500-6000-TMS
Wohnort: bei Karlsruhe
Kontaktdaten:

#9

Beitrag von Happy » Sa 25. Mär 2006, 21:19

Viele weitere praktische Stringoperationen gibt es hier.

Gruß,
Happy
:type: Meine TAPs und Tools

TF5500 PVR (Fw Jan. 2007 P)- 400GB Samsung - AC light 1.05 - Yamaha RX-V 1500
- LAN: Asus WL-500g Deluxe mit ftpd-topfield 0.7.4
TAPs: Quicktimer, Autodelete, Standby, 3PG, Automove, NiceDisplay, PowerRestore, WSS Killer, Eurostirf, Overfly
TV: Sony KDL-46W4500
TF6000 PVR (Fw Okt. 2008)- 160GB Samsung SV1604N
TAPs: iTina, Autodelete, Automove, Autoresume, NiceDisplay, WSS Killer
SRP-2100 (Fw Okt. 2009)
TAPs: SmartEPG, ChangePreview, Autodelete, Automove, BackupSettings,RescueRecs, MySkip, NiceDisplay

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#10

Beitrag von Elle4u » Sa 25. Mär 2006, 22:10

Happy hat geschrieben:Viele weitere praktische Stringoperationen gibt es hier.
Danke! :up:
Gruß,
Elle4u

Benutzeravatar
digitus
Topfversteher
Topfversteher
Beiträge: 269
Registriert: Mo 12. Dez 2005, 09:45
Wohnort: OHZ

#11

Beitrag von digitus » Mi 5. Apr 2006, 18:26

Hi Elle;

Du könntest auch die strings mit der Scanf Funktion in einzelne char zerlegen und diese wieder als String mit sprintf neu zusamenstellen.

greetings
Topfield 5500 PVR Firmware 5.12.05.PH
with SilexServer SX2000WG
,Irdeto SE4.7EN,

Topfield 4000 PVR, Irdeto SE4.7EN
Topfield 7700 HDPVR mit Enigma 2 Spring-Image ;)
DMM 8000 ssst HDPVR NN Image

Taps :[ color=Red]1-QuickfinderA9[/color] , 2=Quicktimer,
3=Nicedisplay,4=Improbox,5=Filer,
6=TSRCommander, 7= ReZap,8=Jukebox,
9=JagsEPG,10=PowerRestore,11=Fastcopy,12=Overfly

(normally last versions)

:topf: :topf: :idea:

t3xi
TAP-Guru
TAP-Guru
Beiträge: 1499
Registriert: Mo 16. Jan 2006, 13:35
Receivertyp: 5^4*2^3

#12

Beitrag von t3xi » Mi 5. Apr 2006, 19:07

Seit wann kann man denn Scanf in TAPs verwenden? Verrate uns doch mal welche Header und Libs man dafür braucht? :p :D

Benutzeravatar
digitus
Topfversteher
Topfversteher
Beiträge: 269
Registriert: Mo 12. Dez 2005, 09:45
Wohnort: OHZ

#13

Beitrag von digitus » Mi 5. Apr 2006, 19:51

Hi T3xi;

Wieso sollte der Befehl nicht in Taps verwendet werden können. Bisher ist mir nicht bekannt, daß es bei Taps irgendwelche Einschräkungen in include - Dateien gibt.


greetings
Topfield 5500 PVR Firmware 5.12.05.PH
with SilexServer SX2000WG
,Irdeto SE4.7EN,

Topfield 4000 PVR, Irdeto SE4.7EN
Topfield 7700 HDPVR mit Enigma 2 Spring-Image ;)
DMM 8000 ssst HDPVR NN Image

Taps :[ color=Red]1-QuickfinderA9[/color] , 2=Quicktimer,
3=Nicedisplay,4=Improbox,5=Filer,
6=TSRCommander, 7= ReZap,8=Jukebox,
9=JagsEPG,10=PowerRestore,11=Fastcopy,12=Overfly

(normally last versions)

:topf: :topf: :idea:

Benutzeravatar
ibbi
Moderierter Ignorator Bitteschöööön!
Moderierter Ignorator  <font color=#E9E9E9>Bitteschöööön!</font>
Beiträge: 7110
Registriert: Fr 9. Dez 2005, 12:49
Receivertyp: TF5000PVR • SRP-2401CI+ Eco
Receiverfirmware: Sep 2005 PHTF • Jan 2015

#14

Beitrag von ibbi » Do 6. Apr 2006, 11:00

t3xi hat geschrieben:Seit wann kann man denn Scanf in TAPs verwenden? Verrate uns doch mal welche Header und Libs man dafür braucht? :p :D
Ohne jetzt nachschauen zu können: stdio.h und libc?

Benutzeravatar
Happy
TAP-Guru
TAP-Guru
Beiträge: 5718
Registriert: Fr 9. Dez 2005, 09:32
Receivertyp: TF4000-5500-6000-TMS
Wohnort: bei Karlsruhe
Kontaktdaten:

#15

Beitrag von Happy » Do 6. Apr 2006, 11:18

ibbi hat geschrieben:Ohne jetzt nachschauen zu können: stdio.h und libc?
Stimmt im Prinzip. Leider arbeitet der Compiler mit der libtap, dort fehlen die Funktionen aus stdio.
Ich habe das mal probiert. Beim Compilieren gehts noch durch, aber der Linker beschwert sich, dass er scanf nicht auflösen kann.

Deswegen gibt es ja auch Ersetzungen von Topfield für Befehle wie printf, fopen usw., weil die eben im Standardbefehlsatz fehlen.

Gruß,
Happy
:type: Meine TAPs und Tools

TF5500 PVR (Fw Jan. 2007 P)- 400GB Samsung - AC light 1.05 - Yamaha RX-V 1500
- LAN: Asus WL-500g Deluxe mit ftpd-topfield 0.7.4
TAPs: Quicktimer, Autodelete, Standby, 3PG, Automove, NiceDisplay, PowerRestore, WSS Killer, Eurostirf, Overfly
TV: Sony KDL-46W4500
TF6000 PVR (Fw Okt. 2008)- 160GB Samsung SV1604N
TAPs: iTina, Autodelete, Automove, Autoresume, NiceDisplay, WSS Killer
SRP-2100 (Fw Okt. 2009)
TAPs: SmartEPG, ChangePreview, Autodelete, Automove, BackupSettings,RescueRecs, MySkip, NiceDisplay

Benutzeravatar
nollipa
Stromspar-Guru und Weißwurstkassenwärter
Stromspar-Guru und Weißwurstkassenwärter
Beiträge: 4129
Registriert: Mo 2. Jan 2006, 16:46
Receivertyp: VU+ Uno 4K SE
Receiverfirmware: 1.11.77
Wohnort: Landkreis Rosenheim

#16

Beitrag von nollipa » Do 6. Apr 2006, 12:42

Hallo,

ich kenne mich mich ja mit programmieren gar nicht aus. Also habe ich mal gegoogelt und das hier gefunden:



Ausser dass es die Laune etwas aufheitert, dürfte das wieder mal ein sehr unqualifizierter Beitrag sein... :wink:
Grüße
Alex

Nuline 122, CS-72, DS-22 und AW-1000
AVR: Denon AVC-X4800H
BD: Oppo BDP-93EU
FB: Harmony 900; TV: Sony KD-65X8507C
VU+ Uno 4K SE

Benutzeravatar
ibbi
Moderierter Ignorator Bitteschöööön!
Moderierter Ignorator  <font color=#E9E9E9>Bitteschöööön!</font>
Beiträge: 7110
Registriert: Fr 9. Dez 2005, 12:49
Receivertyp: TF5000PVR • SRP-2401CI+ Eco
Receiverfirmware: Sep 2005 PHTF • Jan 2015

#17

Beitrag von ibbi » Do 6. Apr 2006, 13:47

Happy hat geschrieben:Stimmt im Prinzip. [...]dort fehlen die Funktionen aus stdio.
Oh Mann, wie kann ich nur so blöd sein. Vielleicht hätte ich beim Lesen mein Gehirn einschalten sollen. :X

Natürlich können die I/O-Funktionen aus der libc nicht verwendet werden.

PS: digitus meinte aber wohl sscanf, und das müsste eigentlich funktionieren.

t3xi
TAP-Guru
TAP-Guru
Beiträge: 1499
Registriert: Mo 16. Jan 2006, 13:35
Receivertyp: 5^4*2^3

#18

Beitrag von t3xi » Do 6. Apr 2006, 13:59

Eigentlich nicht. ;)
Jedenfalls nicht mit libc.a und libgcc.a

Code: Alles auswählen

 undefined reference to `sscanf' 

Benutzeravatar
ibbi
Moderierter Ignorator Bitteschöööön!
Moderierter Ignorator  <font color=#E9E9E9>Bitteschöööön!</font>
Beiträge: 7110
Registriert: Fr 9. Dez 2005, 12:49
Receivertyp: TF5000PVR • SRP-2401CI+ Eco
Receiverfirmware: Sep 2005 PHTF • Jan 2015

#19

Beitrag von ibbi » Do 6. Apr 2006, 18:59

t3xi hat geschrieben:Eigentlich nicht. ;)
Jedenfalls nicht mit libc.a und libgcc.a

Code: Alles auswählen

 undefined reference to `sscanf' 
Stimmt, auch die Bemerkung zu sscanf ziehe ich zurück.

Topfield hat die beiden einzigen Funktionen aus stdio.h, deren Einsatz in einem TAP noch Sinn machen würde, nämlich sscanf und s(n)printf durch TAP_SPrint selbst definiert.

Benutzeravatar
digitus
Topfversteher
Topfversteher
Beiträge: 269
Registriert: Mo 12. Dez 2005, 09:45
Wohnort: OHZ

#20

Beitrag von digitus » Do 6. Apr 2006, 20:01

Hi;

Ihr habt natürlich Recht. War mein Fehler. Liegt wohl daran, daß
ich schon seit längerer Zeit für den Topfield nichts mehr programmiert habe und bei mir der Unterschied zwischen den Funktionen des GCC mit einem "normalen" C-Compiler wohl etwas durcheinander geraten sind. Also wie IBBI richtig bemerkt hat, arbeitet sscanf beim Topf nicht -> wirklich schade.

greetings
Topfield 5500 PVR Firmware 5.12.05.PH
with SilexServer SX2000WG
,Irdeto SE4.7EN,

Topfield 4000 PVR, Irdeto SE4.7EN
Topfield 7700 HDPVR mit Enigma 2 Spring-Image ;)
DMM 8000 ssst HDPVR NN Image

Taps :[ color=Red]1-QuickfinderA9[/color] , 2=Quicktimer,
3=Nicedisplay,4=Improbox,5=Filer,
6=TSRCommander, 7= ReZap,8=Jukebox,
9=JagsEPG,10=PowerRestore,11=Fastcopy,12=Overfly

(normally last versions)

:topf: :topf: :idea:

Antworten

Zurück zu „TF 5x00/6000 PVR TAP“