• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Trenner: Einschränkung beim Ersetzen von Arrayinhalten?

colaholiker

Mitglied
Hallo,
mal eine Frage abseits, die eine allgemeine Sache betrifft:

Beim coden zu meinem aktuellen Projekt nutze ich zum füllen meiner Tabelle ein Array als TabellenZEILE, und darin weitere Arrays jeweils für eine TabellenZELLE.
Daher gibt es auch 2 Trenner ('--' und '::').
Javascript:
var snb = sessionStorage.getItem('sensNb');
    snb = snb.substring(7), //-- Erkenner weg
    fArr = snb.split('--'),
    //-- Values Tb3 Sp4,5
    val1 = Tb3.rows[0].cells[0].innerHTML, //-- =Array-Nr
    val4 = Tb3.rows[0].cells[3].innerHTML,
    val5 = Tb3.rows[0].cells[4].innerHTML,
    lArr = fArr[val1-1].split('::');
        
lArr[3] = val4;
lArr[4] = val5;
lArr = lArr.join('::');
fArr[val1-1] = lArr;
var snb = 'senNb::' + fArr.join('--');
sessionStorage.setItem('sensNb',snb);
Aus dem String snb wird das Array fArr gebildet. Trenner '--'.
Das fArr[x] wird wieder gesplittet zu einem lArr. Trenner '::'.
Ich lese geänderte Tabelleninhalte aus und möchte das Array, am Ende den String snb damit aktualisieren.

Vorgeschichte Ende.

Im o.Code wird beim Bilden von lArr (lArr = fArr[val1-1].split('::');) wohl automatisch der Trenner zum Komma umgewandelt.
Deshalb hatte ich erst die Zeile lArr = lArr.join('::'); zur Korrektur direkt darunter gesetzt.

Ergebnis: beim Trenner '::' werden Inhalte (z,B. lArr[3] = val4;) nicht ersetzt, beim Komma als Trenner schon.

Ich habe die ',' deshalb erst nach überschreiben der Array-Inhalte durch die Trenner '::' ersetzt (wie im Code oben).

Ich hoffe das war verständlich genug für meine 2 Fragen:
- ist das Setzen des Kommas beim Bilden eines Arrays vorgegeben?
- können nur in Arrays mit Kommatrenner Inhalte ersetzt werden?

TIA, c
 
Wenn solche Details isoliert dastehen, ohne dass man den Zusammenhang erkennt, habe ich Probleme das Ganze und deine Fragen zu verstehen. Vielleicht kannst Du eine lauffähige Demo machen, wo man das ganze ansehen kann?

Eine Frage, die ich mir auf jeden Fall stelle: Deine Daten sind ja offensichtlich ein zweidimensionales Array was Du mit split und join zu einem String und zurück konvertierst. Wäre es nicht möglich, dieses Array in einen String im JSON-Format umzuwandeln? Dann wäre die Konvertierung jeweils ein Einzeiler.

Und, BTW: Hast Du dir meine Demo in #8 in deinem anderen Thread, den Du oben erwähnst, gar nicht an gesehen?
 
Vielleicht kannst Du eine lauffähige Demo machen, wo man das ganze ansehen kann?
Hab ich gemacht. Die Variable 'snb' wird, wie in #1 gezeigt, aus dem Speicher genommen und wieder dort abgelegt.

Ich habe zusätzlich noch einiges kommentiert, den Speicher zu Beginn neu mit der ursprünglichen 'snb' befüllt und die Values 'val1'... durch konkrete Werte ersetzt.
'val1' ist dabei eine laufende Nr die Du in 1 oder 2 ändern kannst (weil ich für dieses Testfile hier in snb nur 2 Datensätze untergebracht habe).
val4 und val5 sollten beliebige Inhalte sein dürfen. 'nv' bedeutet für mich, daß dieser Arrayplatz gerade 'nicht verwendet' wird ('0' geht nicht, wäre ein Wert).

Ich habe eine Funktion 'auslesen_tb_a()' verwendet, die dem Code in #1 entspricht und läuft, und eine Funktion 'auslesen_tb_b()' die nicht läuft und mich auf das Problem gebracht hat.
Wenn nicht an mir, liegt's evtl. am Browser?

Deine Daten sind ja offensichtlich ein zweidimensionales Array was Du mit split und join zu einem String und zurück konvertierst.
Wie gesagt, Ursprung ist die Variable snb (also kein Array; ein String), die Arrays (Trenner '--' und '::') ergeben sich erst daraus. 'join' mußte ich lediglich verwenden, um wieder _meinen_ Trenner zu bekommen statt dieses Kommas.

Der erste Punkt zum Thread-Thema ist eben die automatische Umwandlung '::' zu ',' und
der zweite Punkt, daß beim Trenner '::' Array-Items nicht ersetzt werden.

Wäre es nicht möglich, dieses Array in einen String im JSON-Format umzuwandeln?
Mit dem JSON-Format hab ich mich so vor einem Monat herumgeschlagen. Am Ende hab ich's gelassen, weil mein neuer und erster Shelly wohl kein konformes JSON liefert.
Bis zu einem neuen Anlauf vermeide ich das Thema --> Trauben zu sauer:-(

Und, BTW: Hast Du dir meine Demo in #8 in deinem anderen Thread, den Du oben erwähnst, gar nicht an gesehen?
Selbstverständlich!
Hab ich gesehen und sieht sehr gut aus. Wie ich das über eine halbe, eine ganze und nochmal eine halbe Tabelle bekomme... gucke ich wenn die Tabellenmechanik läuft.
Das sollte bald erledigt sein (mit dem Fake-snb geht's schon), dann komme ich erst zum Styling.
Ich schrieb im anderen Thread ja auch, daß mein 'Styling' des Tb-Hintergrunds nur provisorisch ist, und ich mir Gedanken für eine Plazierung der 'Lupe' mache. Dialog- und Tooltip-Boxen kenne ich halt schon.
c.
 

Anhänge

Über dem "hier treten Kommas als Trenner auf" habe ich ein wenig gerätselt. Lösung: Du gibst das Array so aus:
console.log('Array der Tabellenzeile je val1: lArr = ' + lArr);
Dabei wird das Array in seine Stringdarstellung umgewandelt (toString) und im Ergebnis sind die Elemente durch Kommas getrennt. Ändert nichts daran, dass es sich bei lArr um ein Array handelt und nicht um einen String. Lass dir das Array besser so anzeigen:
Code:
console.log('Array der Tabellenzeile je val1:);   
console.log(lArr);
dann wird das klarer.

Und zu dem zweiten, "Das geht nicht", siehe meine Kommentare:
Code:
            //-- hier treten Kommas als Trenner auf
            var    lArr = fArr[val1-1].split('::'), //-- [val1-1]: Array beginnt bei 0
                // an dieser Stelle ist lArr ein Array
                lArr = lArr.join('::');
                // jetzt ist es wieder ein String
//--
console.log('Array der Tabellenzeile je val1: lArr =  ' + lArr); 
            // ... und das Ändern der Werte funktioniert nicht wie gewünscht  
            lArr[3] = val4;
            lArr[4] = val5;
            //-- nach oben versetzt: lArr = lArr.join('::');
            fArr[val1-1] = lArr;

Wo kommt denn dieser String snb überhaupt her, ich vermute, von deinem Microcontroller?
Möglicher Weise besser ganz am Anfang in ein zweidimensionales Array umwandeln und JSON-kodiert im Localstorage speichern und wieder auslesen.
 
Lass dir das Array besser so anzeigen:
console.log('Array der Tabellenzeile je val1:); console.log(lArr);dann wird das klarer.
Ja stimmt. Also existieren Arrays nur mit Komma als Trenner. Komisch daß ich erst jetzt darauf treffe. Ich hatte irgendwo schonmal Kommas in den Array-Items und bin deshalb auf andere Trenner gegangen, hat auch geklappt.
Dann ist das Ersetzen im Array wohl 'mein erstes Mal'...
lArr = lArr.join('::'); // jetzt ist es wieder ein String
Na dann ist ja der Verlauf in der ersten Funktion ok.
Mir fiel auf, daß das bearbeitete Array mit Kommas in das Gesamtarray (jaa, dem String) eingefügt wurde.
Wo kommt denn dieser String snb überhaupt her, ich vermute, von deinem Microcontroller?
Noch nicht. Es gibt nur den 10-teiligen Fake-snb zum probieren (für Dich oben einen 2-teiligen).
Der MC besitzt Temperatursensoren an einem Bus, 0...20 Stück. Die Regel werden 1-3 sein. Damit würde sich das Bauen im js-Code nicht gut machen, deshalb täuscht Fake-snb 10 Sensoren vor.
Möglicher Weise besser ganz am Anfang in ein zweidimensionales Array umwandeln und JSON-kodiert im Localstorage speichern und wieder auslesen.
Wie gesagt ist JSON erstmal böse für mich.
Zzt. baue ich im Code des Miocrocontrollers gerade an einem echten snb-String.
Läuft der, soll das richtige Styling kommen.
Dann sehe ich mir evtl. wieder die Sache mit JSON an...
c.
 
Zurück
Oben