Seite 1 von 1

Länge eines Strings

Verfasst: Freitag 20. Oktober 2006, 10:52
von riven
Hi,

Ich habe folgendes Problem:

Ich möchte den String "*RST" mit einer bestimmten Länge an eine andere Routine übergeben. Dabei soll der zweite Parameter die Länge des Strings übergeben, in dem Fall 4.
Wie sorge ich dafür, dass automatisch die Länge des ersten Paramaters mit len() übergeben wird ?

g.write("*RST",4) als g.write("*RST",len())

Danke

Verfasst: Freitag 20. Oktober 2006, 10:55
von pr0stAta
Öhm einfach

Code: Alles auswählen

len("*RST")
#oder ein ganzes beispiel
txt = "*RST"
g.write(txt, len(txt))
oder verstehe ich da etwas falsch?^^

gruss prosta

Verfasst: Freitag 20. Oktober 2006, 11:03
von riven
hi,

ich habe eine ganze reihe von befehlen.

also nach dem schema

g.write("txt", 3)
g.write("irgendwas", 9)
g.write("string",5)

ich muss also selber nachzählen, wie viele zeichen der gesendete string beinhaltet. kann man sich das geschickt sparen, dass man selber nachzählen muss ?

Verfasst: Freitag 20. Oktober 2006, 11:24
von Blattlaus
riven hat geschrieben:hi,

ich habe eine ganze reihe von befehlen.

also nach dem schema

g.write("txt", 3)
g.write("irgendwas", 9)
g.write("string",5)

ich muss also selber nachzählen, wie viele zeichen der gesendete string beinhaltet. kann man sich das geschickt sparen, dass man selber nachzählen muss ?
1. Möglichkeit:
g.write("txt", len("txt"))
g.write("irgendwas", len("irgendwas"))
g.write("string", len("string"))

2. Möglichkeit:
Warpperfuktions

Code: Alles auswählen

def gWriteWrap(string):
    g.write(string, len(string))

Verfasst: Freitag 20. Oktober 2006, 11:26
von Rebecca
So?

Code: Alles auswählen

g.write("txt", len("txt")
g.write("irgendwas", len("irgendwas"))
g.write("string", len("string")) 

Verfasst: Freitag 20. Oktober 2006, 11:40
von riven
hi,

@blattlaus:

wie kann ich denn für jeden schritt die funktion gWriteWrap aufrufen?
dann muss ich doch irgendwie ein return in der Funktion angeben, oder ?

so klappts nicht:

gWriteWrap("txt")

Verfasst: Freitag 20. Oktober 2006, 11:49
von Crush
mit einer Liste kann man gut etwas für jedes einzelne Element ausführen:

Code: Alles auswählen

>>> txt = ['txt', 'irgendwas', 'string']
>>> for i in txt:
...     print i, len(i)
... 
txt 3
irgendwas 9
string 6
Crush

Verfasst: Freitag 20. Oktober 2006, 12:21
von Rebecca
Waere nicht schlecht, wenn du naechstes mal sagts, was genau nicht geht. Wenn g ein Objekt ist, beschwert er sich wahrscheinlich, dass er g nicht kennt. Das kann man so loesen:

Code: Alles auswählen

def WriteWrap(g, string):
    g.write(string, len(string))
Dann waere der Aufruf

Code: Alles auswählen

WriteWrap(g, "hallo")
return braucht es nicht. Die Funktion uebernimmt das write, was soll die Funktion da wieder zurueckgeben?

Verfasst: Freitag 20. Oktober 2006, 15:10
von rayo
Hi

Warum willst du überhaupt die Länge als Parameter übergeben?

Gruss

Verfasst: Freitag 20. Oktober 2006, 15:11
von riven
Vielen Dank
Mit Rebeccas Hilfe hats geklappt :D

Verfasst: Freitag 20. Oktober 2006, 19:06
von Joghurt
Riven, erkläre doch mal bitte, warum du einer Funktion überhaupt die Länge mit übergeben musst... Sowas spricht in der Regel immer dafür, dass du versuchst, C in Python zu programmieren, und das kann man besser machen.

Verfasst: Freitag 20. Oktober 2006, 19:37
von riven
dass es was mit c zu tun hat, ist richtig. ich übergebe mit g.write zwei parameter, zum einen den string selbst und die stringlänge an eine in c geschriebene unterroutine, die dann den string unter verwendung des entsprechenden treibers über einen ieee-anschluss an ein gerät schickt.
warum dafür der parameter mit der stringlänge wichtig ist, weiss ich nicht.

Verfasst: Freitag 20. Oktober 2006, 21:03
von BlackJack
Aber Du übergibst ein `str` Objekt, das heisst die Funktion muss die Länge auch selbst herausfinden können weil Python-Zeichenketten ihre eigene Länge kennen. Was ist das denn für eine Funktion?

Verfasst: Freitag 20. Oktober 2006, 21:46
von riven
da fragste mich aber was :)
ich weiss nur noch ,dass auf eine dll-datei zugegriffen wird.

Verfasst: Samstag 21. Oktober 2006, 13:18
von lunar
riven hat geschrieben:warum dafür der parameter mit der stringlänge wichtig ist, weiss ich nicht.
C stellt Strings als einfache Arrays dar. Insofern gibt es in C keine einfache Möglichkeit, die Länge eines Strings herauszufinden. Deswegen musst du die Länge des Strings ebenfalls übergeben. Ansonsten gäbe es im C Programm möglicherweise Bufferoverflows oder anderweitige Fehler, wenn der Code versucht, auf Arrayelement jenseits der Grenzen zuzugreifen.
BlackJack hat geschrieben:Was ist das denn für eine Funktion?
Offenbar eine schlecht geschriebene Wrapperfunktion für eine binäre Bibliothek. ;)