Erklärung zur Funktion slice

  • Hallo liebes Forum,

    ich habe eine allgemeine Frage zu der Funktion slice. Im Internet findet man sehr viele, teils sehr einfache Beispiele wie die slice Funktion arbeitet. Das verstehe ich auch. Ich hab gestern verschiedene Befehle ausprobiert um besser nachvollziehen zu können was slice genau macht. Was mir bei vielen Internetseiten die Hilfe beim Javascripten bieten, fehlt, ist eine allgemein gültige Definition. Hier ist mein Beispiel, es wurde getestet und funktioniert:

    Ich habe eine csv Datei, in dieser steht in der ersten Zelle, in A1 ein Text, in A2 steht ein Text und in B2 eine Zahl. In A3 wieder Text und in B3 eine Zahl, das ganze setzt sich weitere 100 mal fort. Ich möchte nur die Zahl extrahieren. Mein erster Schritt war, die komplette csv Datei in eine Textbox zu kopieren. Dort konnte ich sehen, dass nach jedem Zelleintrag ein Semikolon geschrieben wurde.

    Nun hab ich den ReadFile Befehl angewendet um den Inhalt in eine Variable zu schreiben (das ist die Var inhalt). Weiter geht es mit:

    Code
    inhalt = text.split("\n");
    zeile = inhalt[2];
    pos = zeile.indexOf(";");
    text = zeile.slice(pos+1);
    Wert = Number(text);

    Zur Erklärung: zeile = inhalt[2]; enthält den Text Schulfach: ;200

    Es ist nur ein Beispiel. indexOf gibt mir in dem Fall den Wert 12 (das ist die Stelle des Semikolons). Was genau macht slice? Ich kann es mir anhand der Beschreibungen auf verschiedenen Webseiten nicht herleiten, bzw es scheint nicht zusammenzupassen. Slice liefert mit dem Index (2) den zweiten Array Eintrag, wenn es z. B. "Haus", "Schiff", "Meer", "Ente" heißt, dann erhalte ich ["Meer", "Ente"]. Bei meinem Beispiel steht nach pos+1 die Zahl 13 drin und ich erhalte (so ist es richtig) die Zahl 200. Ich würde mich über eine Erklärung freuen.

    Gruß

  • Wie schon in deinem anderen Thread geschrieben ist es in diesem Fall eher angebracht, die Zeile mit split aufzuspalten, dann hast Du sofort die beiden Bestandteile.

    Aber natürlich kann es nicht schaden, auch die Funktionsweise von slice zu verstehen.

    Als erstes musst Du dir darüber im klaren sein, dass die Dinge sich ein wenig unterscheiden, je nachdem ob Du es auf einen String oder ein Array anwendest. Für einen String wird es z. B. hier beschrieben:

    W3Schools.com
    W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript,…
    www.w3schools.com

    Auf deinen Fall angewendet: Das erste Feld "Schulfach" bekommst Du mit

    schulfach = zeile.splice(0, pos);

    Und die Note:

    note = zeile.slice(pos + 1);

    Wobei davon Gebrauch gemacht wird, dass der Defaultwert für den zweiten Parameter des Ende des Strings ist.

  • Vielen Dank für die Erklärung. Ich verwende split. Dieser Befehl steht in meiner Frage ganz oben in der ersten Zeile des Code Beispiels. Mit

    zeile = inhalt[2]; greife ich auf die zweite Zeile mit Zahlenwerten zu (0 ist die Überschrift). Darin steht dann z B Schulfach: ;200 Und mit

    text = zeile.slice(pos+1); erhalte ich die Zahl als Text.

    Jetzt fehlt nur noch Wert = Number(text); und ich bin fertig. Den Index[2] kann ich auch durch eine Laufvariable ersetzen, von 1 beginnend bis zum letzten Eintrag und ... fertig bin ich. Wert entspricht dann aber auch unterschiedlichen Variablen, kann man anpassen.

    Mir ist nicht klar was du anders machen möchtest, ich bin aber für Vorschläge oder Verbesserungen offen.

  • Zitat

    Mir ist nicht klar was du anders machen möchtest

    Ein Mal split um den ganzen Text in Zeilen aufzuspalten.

    Dann noch ein Mal um jede Zeile in Felder Fach und Note aufzutrennen.

    Wie hier angegeben:

  • Verstehe, dann muss ich meine For Schleife aber nochmal anpassen, damit sie nicht jede Zeile durchsucht, sondern nur die wo die Zahl drin steht (das Schulfach will ich ja nicht haben)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!