Länge eines Strings

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
riven
User
Beiträge: 35
Registriert: Mittwoch 27. September 2006, 23:01

Länge eines Strings

Beitragvon riven » Freitag 20. Oktober 2006, 10:52

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
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Beitragvon pr0stAta » Freitag 20. Oktober 2006, 10:55

Ö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
riven
User
Beiträge: 35
Registriert: Mittwoch 27. September 2006, 23:01

Beitragvon riven » Freitag 20. Oktober 2006, 11:03

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 ?
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

Beitragvon Blattlaus » Freitag 20. Oktober 2006, 11:24

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))
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Freitag 20. Oktober 2006, 11:26

So?

Code: Alles auswählen

g.write("txt", len("txt")
g.write("irgendwas", len("irgendwas"))
g.write("string", len("string"))
riven
User
Beiträge: 35
Registriert: Mittwoch 27. September 2006, 23:01

Beitragvon riven » Freitag 20. Oktober 2006, 11:40

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")
Crush
User
Beiträge: 44
Registriert: Montag 1. Mai 2006, 11:32

Beitragvon Crush » Freitag 20. Oktober 2006, 11:49

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
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Freitag 20. Oktober 2006, 12:21

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?
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Freitag 20. Oktober 2006, 15:10

Hi

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

Gruss
riven
User
Beiträge: 35
Registriert: Mittwoch 27. September 2006, 23:01

Beitragvon riven » Freitag 20. Oktober 2006, 15:11

Vielen Dank
Mit Rebeccas Hilfe hats geklappt :D
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Freitag 20. Oktober 2006, 19:06

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.
riven
User
Beiträge: 35
Registriert: Mittwoch 27. September 2006, 23:01

Beitragvon riven » Freitag 20. Oktober 2006, 19:37

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.
BlackJack

Beitragvon BlackJack » Freitag 20. Oktober 2006, 21:03

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?
riven
User
Beiträge: 35
Registriert: Mittwoch 27. September 2006, 23:01

Beitragvon riven » Freitag 20. Oktober 2006, 21:46

da fragste mich aber was :)
ich weiss nur noch ,dass auf eine dll-datei zugegriffen wird.
lunar

Beitragvon lunar » Samstag 21. Oktober 2006, 13:18

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. ;)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder