Txt auslesen, in jeder Zeile Enter und einige Elemente ersetzen

gianfranco0104

Erfahrenes Mitglied
Wieder einmal ein kleines Problem.

ich habe eine Textdatei, in welcher z.B. folgende Daten drin stehen:
Code:
0;0.0;0.0;0.0<br />
1;23.4;345.55;-55.0<br />
2;248.0;257.78;-10.5<br />
3;225.54;147.58;-14.3<br />

nun habe ich eine Funktion gebaut, welche diese TXT-File abruft und ausließt:
Javascript:
var openNP01 = null

  function readTheNpFile01() {
      var initNpFile = new ActiveXObject("Scripting.FileSystemObject");
      projektname = projektname_input.value;
      openNP01 = initNpFile.OpenTextFile("C://wamp/www/CM5_demo/cnc_temp/" + projektname + ".cnc.01np", 1, false); //1 = read
      readALLofNP01 = openNP01.ReadAll();
      var NP01Array = readALLofNP01;
      $('#NP01row').html(NP01Array);
      openNP01.Close();
  }

Soweit klappt das auch wunderbar. Problem ist ich würde gerne, bei Eintragen in die ID "#NP01row" den Text nicht genau so übertragen sondern, die erste (Aufzählungs-)Ziffer gefolgt von einem ";" entfernen, sowie alle weiteren ";" mit einem TAB (also Abstand) versehen - in etwas so:

aus
2;248.0;257.78;-10.5
wird
248.0 257.78 -10.5

Und ein weiteres Problem ist auch, dass die erste Zeile erst garnicht eingelesen werden soll.
Kann ich beim ".ReadAll()" Befehl deklarieren, dass erst ab Zeile 2 gelesen werden soll?

ist das so überhaupt möglich?
Danke für die Hilfe.
 
Zuletzt bearbeitet:
Du weißt schon, dass das Skript nur im IE (wenn überhaupt gem. den Sicherheitseinstellungen) und auch nur auf deinem PC funktioniert, oder?

Du kannst die erste Zeile einfach per substr() abschneiden.
 
Du weißt schon, dass das Skript nur im IE (wenn überhaupt gem. den Sicherheitseinstellungen) und auch nur auf deinem PC funktioniert, oder?
Wird wohl so gedacht sein, denn:
nun habe ich eine Funktion gebaut, welche diese TXT-File abruft und ausließt:
[...]
Soweit klappt das auch wunderbar.
:)

...und zur übersehenen oder nachgereichten Frage:
Und ein weiteres Problem ist auch, dass die erste Zeile erst garnicht eingelesen werden soll.
Du kannst die erste Zeile einfach per substr() abschneiden.
Siehe http://de.selfhtml.org/javascript/objekte/string.htm#substr :)
 
Zuletzt bearbeitet:
Hi, Danke erstmal für die Antworten - ja ist lokal nur für den IE. eine CNC Maschine soll gesteuert werden. Das UI baut auf dem IE auf.

Hat alles geklappt, aber eines habe ich noch. Mit dem CODE:
Javascript:
 var NP01Array = readALLofNP01.replace(/\d+[\;]/g, "\t");

bekomme ich alle ";" zwar weg, und sie sollen mit einem Tabulator ersetzt werden, klappt auch, aber eigentlich möchte ich das nur zwischen den Koordinaten. Angedacht war, dass die Aufzählung am Anfang (z.B. "3;"), also
Code:
;248.0;257.78;-10.5
3;225.54;147.58;-14.3
...
10;225.54;147.58;-14.3
12;225.54;147.58;-14.3

gelöscht wird. So entfernt er (ganz logisch) alle zahlen und das ;...
sieht jetzt so aus:
" 225. 147. -14.3"
sollte aber so aussehen:
"225.54 147.58 -14.3"

will einfach nicht klappen - komme nicht dahinter.
 
Versuch's mal so:
Code:
var NP01Array = readALLofNP01.replace(/^\d+;/, "").replace(/;/g, "\t");
 
Zuletzt bearbeitet:
Hi Sempervivum, danke schonmal für den Tipp, allerdings klappt das leider nur auf der ersten Zeile. die ";" sind überall weg. habe es dann auch mal mit
Javascript:
....(/^\d+;/g, "").replace(/;/g, "\t");
getestet, aber dennoch bleibt es auf der ersten Zeile. wenn ich

Javascript:
....replace(/;/g, "\t");

weg lasse, geht es auch nicht. verzwickt :(

mit
Javascript:
....replace(/\d{1,2}?;/g, " ")
habe ich es jetzt auch probiert. dann kommt aber das Ganze so raus, dass alle 1 und 2 stelligen Zahlen, gefolgt von dem ";" entfernt werden, Beispiel:
225. 147. -14.3

toll wäre es, wenn man sagen könnte die zahlen "1;" und "12;" , aber nicht ".12;" danach mit einem zweiten ".replace" die restl ";" entfernen.
 
Zuletzt bearbeitet:
Lösung gefunden:
Javascript:
 var openNP01 = null

  function readTheNpFile01() {
      var initNpFile = new ActiveXObject("Scripting.FileSystemObject");
      projektname = projektname_input.value;
      readALLofNP01 = openNP01.ReadAll().replace(/0;0.0;0.0;0.0/i, "").slice(8);
      NP01Array = readALLofNP01.replace(/(^\d{1,2};)|;/gm, "  ");
      $('#NP01row').html(NP01Array);
      openNP01.Close();
}
 
Hi,

um die erste Zeile nach dem Lesen der Datei nicht wieder heraus filtern zu müssen, kannst du das File auch zeilenweise einlesen:
Javascript:
function readFile(){
    var fso = new ActiveXObject("Scripting.FileSystemObject"),
        filename = "C:\\testfile.txt",
        i = 0,
        out = "",
        str;

    // Datei öffnen
    f = fso.OpenTextFile(filename, 1);

    // Datei zeilenweise auslesen und Ergebnis ab zweiter Zeile bearbeiten
    while (!f.AtEndOfStream){
        var str = f.ReadLine();
        if(i!==0){
            out += str.replace(/^[^;]+;/, "").replace(/;/g, "\t") + "\n";
        }
        i++;
    }

    // Ausgabe in Konsole
    console.log(out);

    // Datei schliessen
    f.Close();
}
Ciao
Quaese
 
Zurück