Hi, hätte eine Frage:
ich habe einen string:
string = "Monitor Computer handy"
In diesem string sind unterschiedlich viele leerstellen zwischen den
elementen. Ich hatte jetzt probiert dies mit dem replace zu trennen.
string_ohneleer = string.replace(" ", "")
Jetzt möchte ich allerdings den string in eine liste umwandeln. Hier
hatte ich leider noch keine Lösung gefunden, da der replace alle
elemente direkt hintereinander geschrieben hat.
Kann mir hier jemand weiterhelfen? Dane für die Hilfe :D
Leon schrieb:> string_ohneleer = string.replace(" ", "")
Hat (vermutlich) zur Folge, daß der Ergebnisstring gar keine Leerzeichen
mehr enthält. Das ist vermutlich nicht das, was du möchtest.
Leon schrieb:> Jetzt möchte ich allerdings den string in eine liste umwandeln.
Da gibt es vermutlich auch ein string.split
Oliver
Danke für die Antworten. Ja, ich meinte Python. leider konnte ich als
gast nur einmal Pro Stunde schreiben. Habe jetzt auch selbst schon
herausgefunden, das es mit .split() funktioniert. auch wenn ich nicht
weiß warum. weil theoretisch sollte es ja auch an Leerstellen spliten.
Leon schrieb:> string_ohneleer = string.replace(" ", "")
Hättest nur das Komma als Ersatzzeichen verwenden müssen.
Obwohl ich jetzt Python nicht kann.
string_ohneleer = string.replace(" ", ",")
Heinz B. schrieb:> Hättest nur das Komma als Ersatzzeichen verwenden müssen.> Obwohl ich jetzt Python nicht kann.
Dann wäre jedes Leerzeichen durch ein Komma ersetzt worden.
Bringt also gar nichts:
print(string.replace(" ", ","))
Monitor,,,,,,Computer,,,handy
print(Monitor Computer handy".split())
['Monitor', 'Computer', 'handy']
Wohlgemerkt ohne explizite Angabe eines Delimiters.
string_ohneleer = string.replace(" ", "") <- entfernt ALLE Leerzeichen
string_ohneleer = string.replace(" ", " ") <- Lässt eins zwischen den
Wörtern stehen.
string_ohneleer = string.replace("2_leerzeichen", "1 Leerzeichen") <-
Nur zu Erklärung da man die Leerzeichen nicht sehen kann.
Es ist aber dann erforderlich ein TRIM-Befehl zu machen um ALLE
Leerzeichen am Anfang und Ende es kompletten String zu entfernen.
Ich vermute als Programmiersprache VB o. VC
Schlaumaier schrieb:> Ich vermute als Programmiersprache VB o. VC
Von einem "Schlaumaier" würde ich erwarten dass er einfach die vorigen
Postings liest!
Leon schrieb:> Ja, ich meinte Python.
Udo S. schrieb:> Von einem "Schlaumaier" würde ich erwarten dass er einfach die vorigen> Postings liest!
Falsche Erwartung.
Ich lese nicht die üblichen Dummen Sprüche hier. Ich lese den Post des
TO und gebe darauf meine Antwort.
Davon abgesehen ist meine Antwort eine logische und von der
Programmiersprache unabhängig. Ergo auch für Python geeignet.
Schlaumaier schrieb:> Ich lese nicht die üblichen Dummen Sprüche hier.
Nur das es kein dummer Spruch sondern eine zusätzliche Angabe des TOOs
war.
Mehr als 2 Stunden vor deinem Post
Schlaumaier schrieb:> Ich lese den Post des TO und gebe darauf meine Antwort.
Leider eine die völlig am Thema vorbei ist denn du hast nur die Hälfte
des ersten Posts gelesen:
Leon schrieb:> Jetzt möchte ich allerdings den string in eine liste umwandeln.Schlaumaier schrieb:> Falsche Erwartung.
Bei solchen Posts erwartet man nicht mehr viel.
:-(
Schlaumaier schrieb:> string_ohneleer = string.replace(" ", " ") <- Lässt eins zwischen den> Wörtern stehen.
Nein, das macht aus n Leerzeichen ⌊(n+1)/2⌋. Und das Wesentliche fehlt:
Leon schrieb:> Jetzt möchte ich allerdings den string in eine liste umwandeln.Schlaumaier schrieb:> Ich lese nicht die üblichen Dummen Sprüche hier.
Musst du auch nicht. Ich sehe in diesem Thread aber kaum einen dummen
Spruch.
> Ich lese den Post des TO
Davon gibt es aber zwei. Zumindest diese hättest du lesen können.
Edit: Udo war schneller :)
Leon schrieb:
> Jetzt möchte ich allerdings den string in eine liste umwandeln.
In VB wäre das nicht wirklich ein Problem für mich. Aber in Python weiß
ich nicht ob es dafür eine Funktion gibt.
In VB würde ich es mit einer Schleife machen und dabei die Funktionen
MID + INSTR benutzen. Weil ich es andere Funktion auch in VB nicht
kenne.
Genauer gesagt würde ich *my_funktion.string_in_array(text$,liste())*
aufrufen, da ich diese Funktion mal geschrieben habe.
Also habe ich diese Teil der Frage zwar gelesen aber nicht beantwortet,
da ich mir meiner Lösung nicht sicher war. Und kein Interesse daran
hatte, das ich wegen einer 10-20 Zeilen VB - Lösung wieder von euch
beschimpft werde.
Zur ersten Aufgabe: ich lasse gelegentlich im Hexeditor alle "20 20"
durch "20" ersetzen, so oft bis keine mehr gefunden werden. Dann hat man
nur noch einzelne Leerzeichen.
STK500-Besitzer schrieb:> Dann wäre jedes Leerzeichen durch ein Komma ersetzt worden.
Ja, hast Recht. Das habe ich nicht bedacht.
Vielleicht auch mit einem regulären Ausdruck suchen und ersetzen,
falls das in Python möglich ist.
Etwa so : string.replace(" {1,}", ",")
Reguläre Ausdrücke bieten sich förmlich dafür an.
STK500-Besitzer schrieb:
> Dann wäre jedes Leerzeichen durch ein Komma ersetzt worden.
Die sicherste (und von Excel anerkannte Methode) ist, als Trennzeichen
ein CHR(9) = TAB einzusetzen, zur Trennung der Felder.
Da dieses Zeichen im normalen Text nicht vorkommt, ein Komma aber schon.
Ich habe Kommas sogar schon in Adressen gesehen.
Schlaumaier schrieb:> In VB würde ich es mit einer Schleife machen und dabei die Funktionen> MID + INSTR benutzen. Weil ich es andere Funktion auch in VB nicht> kenne.>> Genauer gesagt würde ich *my_funktion.string_in_array(text$,liste())*> aufrufen, da ich diese Funktion mal geschrieben habe.
Warum so unendlich kompliziert, wenn es in Python (das der TE verwenden
will) mit einem einzigen Funktionsuafruf geht?
Schlaumaier schrieb:> Die sicherste (und von Excel anerkannte Methode) ist, als Trennzeichen> ein CHR(9) = TAB einzusetzen, zur Trennung der Felder.
Der String des TE enthält nun aber nun mal Leerzeichen zwischen den
Wörtern und das in einer variablen Anzahl. Ganz abgesehen davon kommt
split() auch mit Tabs, Newlines und allen anderen Whitspace-Zeichen
zurecht.
Oliver S. schrieb:> nennt sich csv. Dreimal darfst du raten, warum.
k.a.
Aber ich kenne CSV mit komma, Komma + Anführungszeichen, TAB,
Sonderzeichen und in allen Kombis davon.
Einfach gesagt, es gibt keine Norm.
Nicht einmal CSV ist genormt, weil die Prg. auch SDF + TXT Dateien so
behandeln.
Und selbst wenn ich die CSV nenne stellen die meisten Programme sich
nicht gleich ein.
Yalu X. schrieb:> Warum so unendlich kompliziert, wenn es in Python (das der TE verwenden> will) mit einem einzigen Funktionsuafruf geht?
Wie bereits weiter oben erwähnt (andere Leute lesen auch nicht alles)
habe ich extra mich zu den Thema nicht geäußert weil ich keine
Listen-Funktionen kenne in VB. Und bei Python sowieso nicht.
Sagt mal, ihr Python - Experten, ist das denn wirklich so
schwierig ? Weil ich es jetzt wissen wollte, habe ich mir
mal das Python 3.9 installiert.
Nach zehn Minuten googeln hatte ich schon Erfolg.
Da war das Googeln mehr wegen der Syntax angesagt.
Heinz B. schrieb:> Sagt mal, ihr Python - Experten, ist das denn wirklich so> schwierig ?
Nein, wurde ja bereits gelöst.
> Monitor,Computer,handy
Das ist keine Liste, sondern ein String.
lieber
",Monitor,Computer,handyi,"
oder
"Monitor,Computer,handy"
als Ergebnis erhalten möchte.
Das alles ist aber etwas offtopic, da der TE ja eine Liste möchte, und
dafür hat er die einfachste Lösung ja schon selbst gefunden.
Dirk B. schrieb:> Das ist keine Liste, sondern ein String.
Wenn er das dann schon nicht hin bekommt, soll er am
besten mit Python und überhaupt mit irgendwelchen Programmier
- oder Scriptspachen gar erst nicht anfangen. Einen String
in eine Liste oder Array zu splitten, ist ja wohl erstes
Schuljahr.
Man muß schon etwas Eigeninitiative zeigen. Das ist doch das
schöne am Programmieren, wenn man einen sogen. AHA-Effekt hat.
Das macht doch den Reiz zum Programmieren erst aus. Den Effekt
hatte ich damals (und auch heute noch) sichtlich genossen. Gerade,
so etwas Banales selber lösen zu können, spornt doch auch zum
Weitermachen bzw. Reinwachsen an.
Heinz B. schrieb:> Wenn er das dann schon nicht hin bekommt, soll er am> besten mit Python und überhaupt mit irgendwelchen Programmier> - oder Scriptspachen gar erst nicht anfangen. Einen String> in eine Liste oder Array zu splitten, ist ja wohl erstes> Schuljahr.
Da sollte sich jemand mal an die eigene Nase fassen.
Gefordert war eine List, kein csv-String.
Das Problem wurde mit dem ersten Post mit ".split()" schön gelöst.
Man kann es natürlich auch zu Fuß (in Assemlber) erledigen.
In PHP würde man "explode()" verwenden.
> Man muß schon etwas Eigeninitiative zeigen. Das ist doch das> schöne am Programmieren, wenn man einen sogen. AHA-Effekt hat.> Das macht doch den Reiz zum Programmieren erst aus. Den Effekt> hatte ich damals (und auch heute noch) sichtlich genossen. Gerade,> so etwas Banales selber lösen zu können, spornt doch auch zum> Weitermachen bzw. Reinwachsen an.
Seine Eigeninitiative war, jemand anders zu fragen. Das halte ich für
legetim, wenn man "den Wald vor lauter Bäumen nicht sieht".
Woher soll ein Anfänger den Begriff "regulärer Ausdruck" kennen?
Das ist ja noch abstrakter als eine Schleife und ein paar If-Abfragen.