Deutsch
Wünsche und Anregungen

Erledigt: Idee: Explode ohne Delimiter

 
Explode ohne Delimiter
KompilierenMarkierenSeparieren
arr$[]=explode(test)

oder
KompilierenMarkierenSeparieren
arr$[]=explode(test,)

könnte das Array befüllen mit den einzelnen Chars - hilfreich und sicher beschleunigend für 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.
 
26.04.2009  
 




Nico
Madysa
Ich bin immer noch der Meinung, daß ein Array ohne Elemente höchst undefiniert ist - in etwa wie ein undimensionierter Bereich.
 
Nico Madysa
27.04.2009  
 



Eine leere Listbox auch undefined?

Ein Array mit 0 Einträgen kann nicht undefined sein da sizeOf(undefined) undefined gäbe statt 0.
 
06.05.2009  
 




Nico
Madysa
Deswegen gab ich die Bereiche als Beispiel.
KompilierenMarkierenSeparieren
declare 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
end

Meinem Empfinden nach sollte das ganze 0,-1,0,-1,0,-1 ausgeben. -1 steht für nicht deklariert, also nicht angefordert, während 0 für deklariert, aber ohne Dimensionen steht, kurz: für leer. (Bei Integervariablen ist das natürlich eine andere Sache.)
Wendet man nun Explode auf einen Leerstring an, so liefert es einen Leerstring zurück; wo nichts hineinesteckt wird, kann auch nichts herauskommen. Die Frage ist doch damit, ob man einen Leerstring als etwas oder als nichts betrachtet.
Betrachtete man einen Leerstring als nichts, so hieße das, dass ein dynamisches Array aufgefasst werden müsste, als unendlich lange Liste von Leerstrings, denn ein Leerstring stünde dann ja für nichts, was ja in einem unbenutzten oder blanken Array zuhauf vorhanden ist.
Damit stellt sich die Frage, wie man die Größe ermittelt. IF, nach deiner Theorie müsste ja folgendes 0, in Worten: Null, ausgeben:
KompilierenMarkierenSeparieren
declare t$[]
t$[0]=
t$[1]=
t$[2]=
t$[3]=
t$[4]=
print SizeOf(t$[])
waitinput
end

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 Größe des Arrays eindeutig bestimmbar ist.
Womit ein Problem zu haben du scheinst, ist, dass Explode überhaupt die Arbeit aufnimmt. All das philosophische Zeug könnte man sich ersparen, wenn man es schlicht so machte:
KompilierenMarkierenSeparieren
case text$<> : matrix$[] = Explode(text$,)

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
cls
var matrix$[] = Eplode(;;;;,;)
print SizeOf(matrix$[])
waitinput
end

Laut meiner Logik kommt fünf heraus, was erhältst du?
KompilierenMarkierenSeparieren
cls
var matrix$[] = Eplode(;,;)
print SizeOf(matrix$[])
waitinput
end

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.
 
Nico Madysa
07.05.2009  
 



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 Datei natürlich 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 natürlich wenn die Funktion nico_explode oder rgh_explode oder some_explode oder like_explode hiesse...
 
07.05.2009  
 




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.
 
Nico Madysa
08.05.2009  
 



Genau. ^^
 
08.05.2009  
 



Nur wie bringen wir das schonend dem Roland bei?
 
13.05.2009  
 




Nico
Madysa
Man könnte ihn in unsere Kilometerpostingdiskussion einladen und ihn erstmal um ein Statement dazu bitten, wie er denn zu obigen Beispielen stehe.
KompilierenMarkierenSeparieren
Roooooooooolaaaaannd?
 
Nico Madysa
14.05.2009  
 



Nico Madysa, Beitrag=52331, Zeitpunkt=14.05.2009
Roooooooooolaaaaannd?


Du musst das so machen:



- das klappte bisher immer!

Zwar drüfte an Deinem Beispiel das sizeOf auf explode nicht funktionieren, weil sich im XProfan das explode dem sizeOf nicht als Array darstellt - aber Sinngemäss ists imho korrekt.
 
14.05.2009  
 




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
 
Nico Madysa
15.05.2009  
 




RGH
iF, Beitrag=52049, Zeitpunkt=26.04.2009
Explode ohne Delimiter
KompilierenMarkierenSeparieren
arr$[]=explode(test)

oder
KompilierenMarkierenSeparieren
arr$[]=explode(test,)

könnte das Array befüllen mit den einzelnen Chars - hilfreich und sicher beschleunigend für statt mid$ in Loops.


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

Gruß
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  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.421 Betrachtungen

Unbenanntvor 0 min.
Selmo07.04.2023
Sven Bader20.03.2023
RudiB.16.09.2021
Jörg Sellmeyer04.11.2011
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

iF (6x)
Nico Madysa (5x)
RGH (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie