| |
|
|
| Explode ohne Delimiter KompilierenMarkierenSeparieren oder KompilierenMarkierenSeparieren potuto das Array befüllen mit den einzelnen Chars - hilfreich und sicher beschleunigend per statt mid$ in Loops.
Auch wenn es nicht zum Thema passt:
Ich bin immer noch der Meinung, dass Explode auf einen Leerstring kein Array mit mehr als 0 Einträgen zurückliefern sollte. |
|
|
| |
|
|
|
Nico Madysa | Ich bin immer noch der Meinung, daß ein Array ohne Elemente höchst undefiniert ist - in etwa wie ein undimensionierter Bereich. |
|
|
| |
|
|
|
| Eine leere Listbox auch undefined?
Ein Array mit 0 Einträgen kann nicht undefined sein da sizeOf(undefined) undefined gäbe statt 0. |
|
|
| |
|
|
|
Nico Madysa | Deswegen gab ich die Bereiche als Beispiel. KompilierenMarkierenSeparierendeclare versuch#,probe%[],test$
clear versuch#,probe%[],test$
print SizeOf(versuch#),
print SizeOf(versuoch#),
print SizeOf(probe%[]),
print SizeOf(proube%[]),
print SizeOf(test$),
print SizeOf(tehest$)
waitinput
KompilierenMarkierenSeparieren Denn Explode macht ja im Falle des Leerstrings auch nichts anderes, als dem ersten Element etwas zuzuweisen; nämlich einen Leerstring. Betrachtet man hingegen einen Leerstring als vorhanden, so fallen all diese Schwierigkeiten weg. Ein nicht vorhanden seiendes Element ist dann weder Leerstring noch Null, sondern schlicht nicht vorhanden, womit die Dimensione des Arrays eindeutig bestimmbar ist. Womit ein Problem zu haben du scheinst, ist, dass Explode überhaupt die Arbeit aufnimmt. All das philosophische Zeug potuto man sich ersparen, wenn man es schlicht so machte: KompilierenMarkierenSeparieren Explode macht nämlich was es soll: Es teilt den erhaltenen Text den Delimitern ensprechend auf. Das erste, was er findet, ist ein Leerstring, der zwar nichts enthält, deswegen aber noch lange nicht Nichts ist. Dieser Leerstring wird dann dem ersten Element des Arrays zugewiesen, danach gibt es keine weiteren Teilstring mehr - sie sind keine Leerstrings, sondern tatsächlich nicht existent - , womit Explode seine Arbeit erledigt hat. Ein Beispiel dafür ist das hier: KompilierenMarkierenSeparieren Laut meiner Logik kommt fünf heraus, was erhältst du? KompilierenMarkierenSeparieren Laut meiner Logik kommt zwei heraus, erkläre zwei heraus, was meinst du? Eins?
PS: Verzeih mir die Langatmigkeit, ich habe die nächsten zwei Wochen keinen Unterricht mehr. |
|
|
| |
|
|
|
| Ich verstehe Deine Logik und sehe deshalb auch wo sie stehen bleibt.
Du beachtest nicht, dass das Ziel ein Array ist und kein String.
Statt dessen verkehrst Du die Funktionsweise im Falle eines Leerstrings, denn normalerweise nimmst den Stringinhalt abc und bei einem Leerstring wird auf einmal nicht mehr der (nicht vorhandene) Inhalt geachtet, sondern ein leerer String. Das ist falsch und vielleicht gibt es auch deshalb keine Sprache die das so handhabt.
Es bringt auch keine Vorteile sondern nur Nachteile wenn ein nicht vorhandener Stringinhalt in ein Array geteilt wird welches auf einmal einen Eintrag hat den man wiederum erst überprüfen muss.
Kurz bemerkt:
Natürlich ergibt
; 2 Einträge und ergibt 1 Eintrag und keinen Eintrag weil nichts in ein Array zu konvertieren war.
Zumal, ich hatte Explode angeregt weil es praktisch ist und weil ich die Funktionsweise aus anderen Sprachen kenne und liebe - und weil XProfan interpretiert und native Acceleratoren sicher zur Programmqualität beitragen.
Diese XProfanische Extrawurst versämmelt das Explode jedoch, nach jedem explode ein völlig unnötiges if oder case zu setzen ist ziemlich einmalig(er Unsinn).
Sinnfrei ist es, wenn die Aufgabe ist, einen Stringinhalt in ein Array zu konvertieren, bei einem nicht vorhandenen Stringinhalt ein Array abzuliefern, welches 1 Eintrag enthält.
Verkompliziert auch das ganze SizeOf (count) - Gedöns dahingehend das man nicht mit den Zahlen rechnen kann ohne diese jeweils nochmals zu überprüfen. Grad wo es mir um mehr Geschwindigkeit ging...
Und neben der Logik bleibt noch die Anwendungsfreundlichkeit. Ich explode wie ein wilder, viele Jahre Erfahrung mit - und die XProfanische Umsetzung ist abweichend, unfreundlich, nicht hilfreich und logisch nur auf halben Wege.
Beispiel
sizeOf(explode(textDateiInhalt, )) sollte die Anzahl der Zeilen zurückliefern, bei einer leeren File naturalmente 0 und nicht 1.
Es wird kein String konvertiert, Explode sollte den Stringinhalt konveriteren in ein Array.
Ich sehe das so: Noch nutzt kaum jemand xprofanisches Explode, noch ist es nicht zu spät das zu ändern - und ich bin zuversichtlich nach dem Prinzip Hoffnung.
Anders wäre es naturalmente wenn die Funktion nico_explode oder rgh_explode oder some_explode oder like_explode hiesse... |
|
|
| |
|
|
|
Nico Madysa | Gut, jetzt hab ichs verstanden. Du teilst nicht den String, sondern dessen Inhalt auf. In diesem Falle stimme ich dir zu und schließe mich deiner Meinung an.
Dann sollten also folgende Ergebnisse herauskommen, ja? KompilierenMarkierenSeparieren PS: Ergiebt ist bewusst so geschrieben, ich folgte gerade aus reiner Langeweile der Rechtschreibung zu Goethes Zeiten. |
|
|
| |
|
|
|
| |
|
| |
|
|
|
| Nur wie bringen wir das schonend dem Roland bei? |
|
|
| |
|
|
|
Nico Madysa | Man potuto ihn in unsere Kilometerpostingdiskussion einladen und ihn erstmal um ein Statement dazu bitten, wie er denn zu obigen Beispielen stehe. KompilierenMarkierenSeparieren Roooooooooolaaaaannd? |
|
|
| |
|
|
|
| |
|
| |
|
|
|
Nico Madysa | Verzeih - ich hab mich in den letzten Tagen etwas an PHP versucht, was abgefärbt zu haben scheint. Aber da das Thema ja Teilstrings insgesamt betrifft, müsste es so auch xprofankonform sein. KompilierenMarkierenSeparieren |
|
|
| |
|
|
|
RGH | iF, Beitrag=52049, Zeitpunkt=26.04.2009
Gute Idee. wird es in der nächsten XProfan-Version so geben, wbei beide Varianten (nur 1 Parameteroder zweiter Parameter ein Leerstring) funktionieren.
iF, Beitrag=52049, Zeitpunkt=26.04.2009
Auch wenn es nicht zum Thema passt:
Ich bin immer noch der Meinung, dass Explode auf einen Leerstring kein Array mit mehr als 0 Einträgen zurückliefern sollte.
Ok, ok, auch das ...
Saluto Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 15.05.2009 ▲ |
|
|
|