Split-Funktion

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
IngaD
Foriker
Beiträge: 27
Registriert: Mo 29. Jul 2024, 09:49
Kontaktdaten:

Split-Funktion

Beitrag von IngaD » Do 8. Aug 2024, 15:48

Hallo Liebe Gambas-Gemeinde,

ich komme mit der Split-Funktion in Gambas nicht klar.
Habe auch nach viel Sucherei keine für mich brauchbare Lösung gefunden.

Ich habe beispielsweise folgenden String: "08.08.24|Einkauf|23,56".

In VB.net ist die Aufgabe leicht zu lösen:

Dim st() As String = "08.08.24|Einkauf|23,56".Split("|")
TextLabel1.Text = st(2) >Teilstrings werden durchnummeriert st(0), st(1), st(2)
Im TextLabe1 steht dann 23,56.

Die eigentliche Aufgabe ist es, aus einer TextArea mit n Zeilen alle letzten Substrings zu addieren über
einen Schleifendurchlauf, also:

06.08.24|Einkauf|12,09
07.08.24|Einkauf| 5,00
08.08.24|Einkauf|23,56

u.s.w.

Die Summe (hier 40,65) wird dann in einem Label ausgegeben.


Alternativ wäre es mir auch recht, da die Daten in einem GridViev ausgegeben werden, die Summe aller Rows in Column 3 zu erhalten.
Ich hoffe mein Problem verständlich dargestellt zu haben und benötige Hilfe, evtl. mit einem kleinen Snippet.

Ich freue mich auf Eure Hilfe und sage Danke
IngaD

Poly
Foriker
Beiträge: 54
Registriert: Fr 17. Apr 2020, 12:46
Kontaktdaten:

Re: Split-Funktion

Beitrag von Poly » Do 8. Aug 2024, 18:07

Inga,

Das Splitten läuft genauso ab wie Du es beschrieben hast.

ich kenne Visual Basic nicht, deshalb kann ich das jetzt nicht vergleichen, aber es sieht in Gambas ziemlich ähnlich aus.

In Gambas: siehe https://gambaswiki.org/wiki/lang/split

Code: Alles auswählen

StringArray = Split ( String [ , Separators , Escape , IgnoreVoid , KeepEscape ] )
also Du schreibst für Visual Basic:
Dim st() As String = "08.08.24|Einkauf|23,56".Split("|")
--> In Gambas ist es also ein Funktion, welcher Du den String und den Seperator als Parameter gibst.
du schreibst diese in Split()

---> in Visual Basic schreibst Du hingegen Split am Ende des Strings als Methode wie bei Python.

Hier ist es also so, dass Du in Gambas vorher eine Array dimensionierst, welches das Ergebnis der Funktion aufnimmt.
In Gambas gibt es zwei Arten von Arrays dynamische, deren Größe veränderbar ist und statische, wo die
Größe bei der Deklaration festgelegt wird und dann nicht mehr verändert werden kann.
In der Regel solltest Du nur dynamische Arrays verwenden.


Du erstellst es wie folgt:

Dim arString As String[] --> entscheidend ist hier String[ ], es ist also ein Array aus Zeichenketten.

Wenn Du diesem String etwas zufügen möchtest, dann müsstest Du vorher erst ein array-Objekt erstellen,
sonst würdest Du ein Fehler erhalten.

arString.Add("Toll") ---> das wäre ein Fehler, Nullobjekt, denn Du hast noch kein Objekt erstellt.

deshalb, erstellst Du jetzt erst einmal mit dem New-Operator ein Objekt.

arString = New String[]

diesem Array-Objekt kannst Du jetzt weitere Elemente zufügen.

arString.Add("Toll") --> jetzt gibt es keinen Fehler


etwas anders wäre es, wenn Du bei der Deklaration bereits die Initialisierung vornimmst.

also z.B.

Dim arString As String[] = ["eins", "zwei", "drei"]

Jetzt hast Du ein Array mit drei Elementen, wobei der Index bei 0 beginnt.

Diesem Array, weil es ja dynamisch ist, kannst Du jetzt auch weitere Elemente hinzufügen.

Also z.B. arString.Add("Toll") ---> jetzt gibt es wiederum keinen Fehler.



Wie ist es jetzt beim Splitte?

arString = Split("Das ist ein Test", " ")

--> das ist ja das gleiche wie die Initialisierung: String[] = ["eins", "zwei", "drei"]

--> nur eben hier mit den Elementen dieser Split-Anweisung:

arString[ ] = ["Das", "ist", "ein", "Test" ] --> ein Array mit 4 Elementen

auch hiernach kannst Du diesem Array weitere Elemente hinzufügen.

arString = Split("Das ist ein Test", " ")


Das hatte jetzt vielleicht weniger mit dem Splitten zu tun, aber da Du durch das Splitten ein Array erhältst, wollte ich das noch mal ausführlich darstellen.


Das Splitten

Neben dem "Separator" hast Du bei der Funktion Split noch weitere Parameter die aber alle optional sind und deshalb erspare ich es Dir hier jetzt diese zu erklären.

Wie ich Dir letztes mal gezeigt habe, kannst Du auf diese Weise jede Zeile einer Datei, welche Du einliest splitten.

sTempListe = Split(hFile.ReadLine(), " ")

--> hFile.ReadLine() steht hier als für eine Zeile der Datei, welche in einem String gelesen wird.

--> ich habe es ja mit eine temporären Liste gemacht, welche Du natürlich auch weglassen kannst und stattdessen die einzelnen
Elemente des Splits direkt aufrufst als z.B. Split(hFile.ReadLine(), " ")[1]

--> aber ich bleibe lieber bei der Liste.
n Zeilen alle letzten Substrings

---> da Du nicht weißt wie viele einzelne Elemente eine Zeile hat
müsstest Du hier mit
sTempListe.Last arbeiten. .Last gibt Dir das letzte Element eines Arrays wieder.

schaue Dir mal die Methoden der Arrays an, ich weiß nicht, welche da VSB lieferte:
https://gambaswiki.org/wiki/comp/gb/string[]

So, die Antwort war etwas umfangreicher.
Entschuldige bitte, wenn das meiste für Dich ein alter Hut ist. Ich habe aber Null Erfahrung mit Visual Basic und habe so
erklärt wie ich es aktuell durch das eigenes Studium verstanden habe.
Ceterum censeo Goo..... esse delendam

vuott
Foriker
Beiträge: 262
Registriert: Fr 16. Jan 2015, 01:27
Wohnort: Europäische Union - Italia
Kontaktdaten:

Re: Split-Funktion

Beitrag von vuott » Do 8. Aug 2024, 18:08

Wenn Sie jedoch die Funktion "Split()" verwenden möchten, könnte dies ein möglicher Code sein:
gambas code
Public Sub Main()

' Wir nehmen an, dass die Zeichenkette folgende Textstruktur hat:
  Dim t As String = "06.08.24|Einkauf|12,09\n"
                    "07.08.24|Einkauf| 5,00\n"
                    "08.08.24|Einkauf|23,56"
  Dim ss As String[]
  Dim c As Single

' Die erste Funktion "Split()" identifiziert die drei Unterzeichenketten und unterscheidet sie nach dem Zeichen escape "\n" (&h0A):
  ss = Split(t, gb.NewLine)

' Für jede Teilzeichenfolge im "ss"-Array...
  For n As Byte = 0 To ss.Max
' ...der letzte Teil wird ermittelt, welcher sich durch das Zeichen "|" unterscheidet.
' Wird dann von einer numerischen Darstellung des Texttyps in einen numerischen Wert des Typs "Single" umgewandelt und fügen ihn zu den vorherigen hinzu:
    c += Val(Split(ss[n], "|")[2])
  Next

  Print c, Format(c, "0.00")

End
Europaeus sum

IngaD
Foriker
Beiträge: 27
Registriert: Mo 29. Jul 2024, 09:49
Kontaktdaten:

Re: Split-Funktion

Beitrag von IngaD » Fr 9. Aug 2024, 16:52

Hallo Poly

vielen Dank für Deine sehr umfangreiche Hilfestellung.

Eines noch: Ich schreibe/programmiere in dem Sinne nicht für VB.
Bin mal vor neun Jahren aus Verlegenheit auf VB.Net gekommen, aber die "große Programmiererin" bin ich echt nicht; habe einige kleine Apps zum eigenen Vergnügen geschrieben.

Um mein Hirn "locker und beweglich" zu halten versuche ich mich jetzt in Gambas.

Zu MS Windows Zeiten hatte ich mir ein durchaus konfortables Haushaltsbuch geschrieben - mit viel Try and Error übrigens.

Seit etwa 3-4 Monaten bin ich Linux Mint(-erin). Eine Welt, in die sich soror et frater auch erst mal reindenken muss (meine Meinung!).

So ein Haushaltsbuch versuche ich jetzt in Gambas zu realisieren.
Werde Deine Anleitung beachten und "durcharbeiten". Ich denke, dass ich da mehr verstehen werde.

Wirklich vielen Dank Poly und lieber Gruß von
IngaD

IngaD
Foriker
Beiträge: 27
Registriert: Mo 29. Jul 2024, 09:49
Kontaktdaten:

Re: Split-Funktion

Beitrag von IngaD » Fr 9. Aug 2024, 17:20

Soror fratrem salutat!

Hallo vuott, wie heißt es doch gleich: "Cogito ergo sum, non cogito ergo dumm."

Ich bekomme Ihr snippet zum splitten und auswerten einer Textdatei nicht umgesetzt.

Wenn ich Ihr script ut est anwende mit einer kleinen Änderung für die Darstellung der Summe in einem TextLabel, dann klapp es.

Aber ich habe die Strings in einer Textdatei - Zeile für Zeile.

Wenn ich die Variable t mit t = File.Load("/home/ingad/Gambas/Split_Test_1/August_2024.txt") angebe, erhalte ich eine Fehlermeldung in der Zeile

c += Val(Split(ss[n], "|")[2])

Typenunverträglichkeit: Erwarte Number, stattdessen Null erhalten

In der Textdatei steht:

06.08.24|Einkauf|12,09
07.08.24|Einkauf| 5,00
08.08.24|Einkauf|23,56


Es gibt bestimmt eine einfache Lösung, auf die ich nicht komme.
Wie sieht die aus? Bitte um Hilfe.

Danke und lieber Gruß von soror IngaD.

Poly
Foriker
Beiträge: 54
Registriert: Fr 17. Apr 2020, 12:46
Kontaktdaten:

Re: Split-Funktion

Beitrag von Poly » Fr 9. Aug 2024, 18:45

Hallo Inga,

bevor Dir @vuott genau seinen Code erklärt.

Hier noch mal mein alternativer Beitrag, der vielleicht nicht ganz so guter Prommierstil ist.

Code: Alles auswählen


Public Sub btnClick_Click()

  Dim hFile As File
  Dim sPath As String = ""
  Dim sTempListe As String[]                      ' Dieses Array verwendet ich als temporäre Zeile der Datei  
  Dim sTempString As String 
  Dim iMaxLine As Integer
  Dim sgSumme As Single                           ' ***********Das ist die Summe aller Punkte************************** 

  sPath = "./Datentest.txt"                              '  --> das ist also die Datei 
 
  hfile = Open sPath For Read                      '   --> hier öffne ich die Datei als Stream
  
While Not Eof(hFile)                                     '   --> ich lese die Datei einmal komplett
  Line Input #hFile, sTempString                  '   --> um die Anzahl der Zeilen zu ermitteln. 
  Inc iMaxLine
Wend
  
  Seek #hFile, 0                                             '    --> setzt den Datei-Pointer wieder auf den Anfang, damit ich die Datei noch mal lesen kann. 
 
  GridView1.Columns.Count = 3                    '     --> Das sind meine drei Spalten 
  GridView1.Rows.Count = iMaxLine                   
  GridView1.Header = GridView1.Horizontal
  GridView1.Columns[0].Text = "Vorname"
  GridView1.Columns[1].Text = "Nachname"
  GridView1.Columns[2].Text = "Ausgaben"
  
  For i As Integer = 0 To iMaxLine - 1             '     --> Die Anzahl der Spalten sind eine weniger als die ermittelte Zeilen 
   sTempListe = Split(hFile.ReadLine(), " ")     '    ---> wahrscheinlich ist es nicht nötig jede Zeile in eine Liste zu lesen, sondern 
   GridView1[i, 0].text = sTempListe[0]             '    ---> das Ganze geht wohl auch direkt, aber ich finde es so übersichtlicher. 
   GridView1[i, 1].text = sTempListe[1]             '    ---> auch die Tatsache, dass ich hier die Spalten 0 bis 2 aufführen kann mensch
   GridView1[i, 2].text = sTempListe[2]             '    ---> bestimmt besser machen und mit einer Variablen arbeiten. 
   sgSumme += Val(sTempListe[2])                 '******************  hier werden die einzelnen Punkte aufaddiert. *******************
   sTempListe.Clear()                                       '    ---> ich lösche die Liste immer wieder, ist vielleicht auch nicht notwendig, weil sie 
 Next                                                                '    ---> wohl überschrieben wird. 


Close #hfile                             ' das hatte ich noch vergessen. Natürlich solltest Du einen Stream nach der Nutzung wieder schließen. 

Print sgSumme    ' Das ganze kannst Du jetzt natürlich auch jeden Label oder so ausgeben. Hier nur zur Demonstration. 

End



Entscheidet ist jetzt aber wie Du die Textdatei aufbaust aus der Du liest.

Meine sieht wie folgt aus:

Peter Müller 10,23
Franz Kranz 22,23
Ingo Ganz 44,24

wie gesagt ich verwende Space (" ") zur Trennung Du müsstest dann als Separator "|" bei der Splitfunktion eingeben.


Aber jetzt ganz wichtig.

Die Funktion Val() die Du ja verwendest, um den String sTempListe[2] (siehe die ******** in den Kommentaren meines Code: Val(sTempListe[2] oben)) in eine Fließkommazahl umzuwandeln verwendet zur Trennung den Dezimalstellen das "," und nicht "." , also so wie es im Deutschen Sprachraum üblich ist.
Das ist jetzt genau das was Du Dir erwünscht, aber entscheidend ist, dass Gambas hier keine eigene Regel hat, sondern die
Spracheinstellungen Deines Systems nutzt.

siehe mal hier: https://gambaswiki.org/wiki/lang/val

"The current localization is used for converting numbers and dates. So beware that date, time, decimal and thousands separators change with the language! "

Das ist wichtig, weil es gibt im Gambas auch Funktionen, welche eben nicht die lokalen Einstellungen nutzt.

siehe z.B. https://gambaswiki.org/wiki/lang/cfloat

"Be careful! The current localization is not used by this function.

In other words, if the expression is a string, the decimal separator in the expression MUST be ".", even if in the localization it is defined as "," like in German, French..."


Und genau das könnte bei Deinem Code der Fall sein, aber das wird @vuott Dir ja noch genau zeigen.
Wenn Du in meinem Code oben, die Textdatei in der letzten Spalte mit "." statt "," aufgebaut hättest, dann wäre genau die
von Dir beschriebene Fehlermeldung erschienen.


Abschließend noch einmal.
Es freut mich, wenn ich Dir wirklich helfen konnte, aber ich maße es mir nicht an, mich hier mit den richtigen Profis zu konkurrieren.
Vielleicht kannst Du meinen Ausführungen einige Sachen entnehmen, weil ich gerade selber erst dabei bin, mich in Gambas einzuarbeiten und auf ähnliche Probleme gestoßen bin.
Ich habe aber mittlerweile die Dokus fast durch und freue mich gerade, dass zumindest etwas hängen geblieben ist.

beste Grüße
Poly
Zuletzt geändert von Poly am Fr 9. Aug 2024, 20:07, insgesamt 1-mal geändert.
Ceterum censeo Goo..... esse delendam

IngaD
Foriker
Beiträge: 27
Registriert: Mo 29. Jul 2024, 09:49
Kontaktdaten:

Re: Split-Funktion

Beitrag von IngaD » Fr 9. Aug 2024, 19:01

Hallo Poly,

Du bist flott!

Vielen Dank dafür. Bin gerade "auf dem Sprung" und werde mich am WE darum kümmern: der sieht gut aus.
Die Sprache der Gambas-Tutorials ist mir noch fremd. Aber ich hoffe, dass das eines Tages besser klappt mit dem Verständnis (besser Verstand). :)

Übrigens: Meine Lateinkenntnisse bitte nicht überstrapazieren; das kleine Latinum hatte ich vor etwas mehr als 50 Jahren. Da ist nicht mehr viel übrig. :)

Ich melde mich bei Dir und lieber Gruß von
IngaD

Poly
Foriker
Beiträge: 54
Registriert: Fr 17. Apr 2020, 12:46
Kontaktdaten:

Re: Split-Funktion

Beitrag von Poly » Fr 9. Aug 2024, 19:06

Ich hatte gar kein Latein, aber den Spruch kennst Du doch oder, also ohne Goo. ;)

Schönes Wochenende, beste Grüße
Poly
Ceterum censeo Goo..... esse delendam

vuott
Foriker
Beiträge: 262
Registriert: Fr 16. Jan 2015, 01:27
Wohnort: Europäische Union - Italia
Kontaktdaten:

Re: Split-Funktion

Beitrag von vuott » Fr 9. Aug 2024, 23:53

IngaD hat geschrieben:
Fr 9. Aug 2024, 17:20
Typenunverträglichkeit: Erwarte Number, stattdessen Null erhalten

In der Textdatei steht:

06.08.24|Einkauf|12,09
07.08.24|Einkauf| 5,00
08.08.24|Einkauf|23,56
Italicus frater germanicae sorori salutem dicit !

Man muss die Struktur der Zeichenkette "genau" kennen.
Ich meine: Gibt es ein "Newline"-Byte am Ende jeder Zeile?
D.h. Wert (in hexadezimal) 0A ? Oder gibt es nichts?

Wenn Sie einen Hexadezimal-Editor haben, können Sie dies überprüfen.

IngaD hat geschrieben:
Fr 9. Aug 2024, 17:20
Typenunverträglichkeit: Erwarte Number, stattdessen Null erhalten
Uhmmm... :? Ich vermute, dass am Ende der letzten Zeile (Hex 0A) ein "Newline"-Escape-Zeichen vorhanden ist.
Europaeus sum

vuott
Foriker
Beiträge: 262
Registriert: Fr 16. Jan 2015, 01:27
Wohnort: Europäische Union - Italia
Kontaktdaten:

Re: Split-Funktion

Beitrag von vuott » Sa 10. Aug 2024, 00:10

...und wenn Sie diese Zeile so ändern?
gambas code
For n As Byte = 0 To ss.Max - 1   '  ...oder ss.Count - 2

  ...etc....
Europaeus sum

Bonus
Foriker
Beiträge: 111
Registriert: Mo 18. Mär 2024, 14:38
Kontaktdaten:

Re: Split-Funktion

Beitrag von Bonus » Sa 10. Aug 2024, 09:46

gambas code

ss = Split(t, gb.NewLine, Null, True)

Dadurch entstehen keine Leerzeilen
Ich bin Engländer und verwende Google Übersetzer. (Das tut mir leid)

vuott
Foriker
Beiträge: 262
Registriert: Fr 16. Jan 2015, 01:27
Wohnort: Europäische Union - Italia
Kontaktdaten:

Re: Split-Funktion

Beitrag von vuott » Sa 10. Aug 2024, 11:28

Bonus hat geschrieben:
Sa 10. Aug 2024, 09:46
gambas code

ss = Split(t, gb.NewLine, Null, True)

Dadurch entstehen keine Leerzeilen
Wenn die gesamte Zeichenkette mit dem Wert von 'newline' (&h0A) endet - was sehr wahrscheinlich ist -, ist Ihre Lösung perfekt.
Ich hatte diese :? Lösung vergessen !
Europaeus sum

Poly
Foriker
Beiträge: 54
Registriert: Fr 17. Apr 2020, 12:46
Kontaktdaten:

Re: Split-Funktion

Beitrag von Poly » Di 13. Aug 2024, 17:11

@vuott und @bonus: Vielen Dank für diesen anderen, effizienteren Lösungsweg.

Dazu habe ich aber paar Fragen und ein Code, welcher bei mir leider nicht so funktioniert wie erhofft.

Zu den Fragen

1.) Ist es generell besser, eine Text-Datei erst in einer Aktion in einen String zu speichern und diesen dann nachher zu splitten?
2.) Wenn dem so ist. Liegt das daran, dass ich die Datei nach dem Laden direkt wieder schließen kann, währen ich sie durch das Einlesen mit Line Input ja länger offen halten muss?
3.) Und wenn dem so ist. Wofür eignet sich dann ein Line Input?

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

und jetzt zu meinen Code, der meiner Meinung nach ein merkwürdiges Verhalten zeigt.
Ich habe dabei einen Teil Eures Lösungsweges versucht anzuwenden.
gambas code
Public Sub btnClick_Click()

  Dim hFile As File
  Dim sPath As String = ""
  Dim sTempListe As String[]
  Dim sDatei As String
  Dim sgSumme As Single

  'Datei laden und in sDatei als kompletten String speichern 
  sPath = "./Datentest.txt"
 
  hfile = Open sPath For Read 
  
  sDatei = hFile.Load(sPath)
  
  ' File wird nicht mehr gebraucht und deshalb geschlossen 
  Close #hFile
  
  'Die Datei wird gespalten bei NewLine, Escapezeichen ist Null und leere Elemtente werden ignoriert. 
  sTempListe = Split(sDAtei, gb.NewLine, Null, True)
 
 ' Hier werden zu überPrüfung einfach verschiedene Elemente ausgegeben 
 Print sTempListe[0]
 Print Split(sTempListe[0], " ")[1]
 Print sTempListe.Max 
  
  GridView1.Columns.Count = 3
  GridView1.Rows.Count = sTempListe.Max 'auch mit einer Zahl wie 6 wird der Fehler nicht behoben 
  GridView1.Header = GridView1.Horizontal
  GridView1.Columns[0].Text = "Vorname"
  GridView1.Columns[1].Text = "Nachname"
  GridView1.Columns[2].Text = "Alter"
  
  For iCount As Byte = 0 To sTempListe.Max
   GridView1[0, 0].text = Split(sTempListe[iCount], " ")[0]
   GridView1[1, 1].text = Split(sTempListe[iCount], " ")[1]
   GridView1[2, 2].text = Split(sTempListe[iCount], " ")[2]
   sgSumme += Val(Split(sTempListe[iRow], " ")[2])
  Next

End

Das Problem ist, wenn ich in der for-Schleife folgendes schreibe:
gambas code
For iRow As Byte = 0 To sTempListe.Max
   GridView1[iRow, 0].text = Split(sTempListe[iCount], " ")[0]
   GridView1[iRow, 1].text = Split(sTempListe[iCount], " ")[1]
   GridView1[iRow, 2].text = Split(sTempListe[iCount], " ")[2]
Next
dann bekomme ich immer ein

Bad row index (Fmain 45
) Error

das kann auch nicht an der Split-Anweisung : Split(sTempListe[iCount], " ")[0...3] liegen

ich bekomme diesen Fehler auch, wenn ich folgendes schreibe:
gambas code
For iRow As Byte = 0 To sTempListe.Max
  GridView1[iRow, 0].text   = "Eins"
  GridView1[iRow, 1].text =  "Zwei"  
  GridView1[iRow, 2].text =  "Drei" 
Next

während, wie oben gezeigt
gambas code
  For iCount As Byte = 0 To sTempListe.Max
   GridView1[0, 0].text = Split(sTempListe[iCount], " ")[0]
   GridView1[1, 1].text = Split(sTempListe[iCount], " ")[1]
   GridView1[2, 2].text = Split(sTempListe[iCount], " ")[2]
  Next
keinen Fehler liefert.
Wenn ich also die Gridview.Koordinaten mit laterale Konstanten (0..1...2) schreibe funktioniert es, aber es nicht ermöglicht für die Reihe des Grid-Views eine Variable zu verwenden.
in meinem anderen Code den ich vorne gezeigt habe, war das kein Problem.

Gambas scheint im Falle von
gambas code
For iRow As Byte = 0 To sTempListe.Max
  GridView1[iRow, 0].text   = "Eins"
  GridView1[iRow, 1].text =  "Zwei"  
  GridView1[iRow, 2].text =  "Drei" 
Next
Die Variable iRow nicht im Ausdruck

GridView1[iRow, 0].text

zu ersetzen ?????

Es ist im übrigen auch egal, wie ich diese Variable deklariere, also auch als Integer, Short, etc.
und auch ob ich die Deklaration schon am Anfang der Datei vornehme und dann in der Schleife das As ... weglasse.
Es wird mir immer der gleiche Fehler angezeigt.

Da das ganze mit allen Versionen Gambas 3.16.2, 3.18.3 und 3.19.3 genauso ist, muss es da irgendwie ein Fehler in meinen Code geben???
Ich bekomme das Problem zwar anderes gelöst, aber ich wollte ausprobieren, wie ich das ganze löse ohne eine zweite temporäre Liste zu erstellen und stattdessen mit dem Konstrukt Split(sTempListe[iCount], " ")[0] zu arbeiten, welche mit dann z.B., das erste Element liefern sollte.

Wäre sehr nett, wenn mir das vielleicht einer erklären könnte.
Danke :)
Ceterum censeo Goo..... esse delendam

Bonus
Foriker
Beiträge: 111
Registriert: Mo 18. Mär 2024, 14:38
Kontaktdaten:

Re: Split-Funktion

Beitrag von Bonus » Di 13. Aug 2024, 22:51

GridView1.Rows.Count = sTempListe.Max ??

Try
GridView1.Rows.Count = sTempListe.Count
Zuletzt geändert von Bonus am Di 13. Aug 2024, 23:23, insgesamt 2-mal geändert.
Ich bin Engländer und verwende Google Übersetzer. (Das tut mir leid)

Poly
Foriker
Beiträge: 54
Registriert: Fr 17. Apr 2020, 12:46
Kontaktdaten:

Re: Split-Funktion

Beitrag von Poly » Di 13. Aug 2024, 23:18

Vielen Dank für Deine schnelle Antwort @Bonus

sTempListe.Count = 7 ---> ich habe sieben Datensätze

deshalb ist

For iRow = 0 To sTempListe.Count ---> Außerhalb der Array-Grenzen (out of bounds)

und

For iRow = 0 To sTempListe.Count -1 --> ergibt den gleichen Fehler Bad row index (Fmain 51)

sTemplListe.Max ---> ergibt den Wert des höchsten Index von sTempliste, das ist sTempilste[6] --> also 6


Die Markierung beim Ausführen des Codes Springt auf das *iRow* in z.B.

GridView1[iRow, 0].text = Split(sTempListe[iRow], " ")[0] ---> Bad row index (Fmain 51)

ich mache wahrscheinlich etwas grundlegendes falsch, aber ich habe es ja schon mit allen möglichen anderen Sachen getestet.

Wenn ich die Zahlen per Hand eingeben, dann läuft es prima, aber dann kann ich mir die Schleife ja sparen.

also:
gambas code
  For iRow = 0 To sTempListe.Count - 1 
   GridView1[2, 0].text = Split(sTempListe[iRow], " ")[0]
   GridView1[3, 1].text = Split(sTempListe[iRow], " ")[1]
   GridView1[3, 2].text = Split(sTempListe[iRow], " ")[2]
   sgSumme += Val(Split(sTempListe[iRow], " ")[2])
  Next



läuft prima durch.

Aus irgendwelchen Gründen akzeptiert er hier bei dem

GriedView[Row, Column] keine Variablen??


Ganz lieben Dank, dass Du Dir das so schnell angesehen hast und das obwohl gerade eine neue Gambas Version getestet werden muss
:)
Zuletzt geändert von Poly am Di 13. Aug 2024, 23:44, insgesamt 3-mal geändert.
Ceterum censeo Goo..... esse delendam

Antworten

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot], Google [Bot] und 0 Gäste