# Datei Zeilenweise einlesen



## dtm (1. August 2009)

Hy

wie kann ich mit Javascript eine Datei (CSV/TXT) die auf dem gleichen Server (Verzeichnis) wie die HTML-Dateit mit dem Script liegt Zeilenweise / Zeichenweise ab einer bestimmten Pos. einlesen?

Zur Not wäre es auch möglich, die ganze Datei einzulesen und danach in Zeilen zu trennen


----------



## Quaese (1. August 2009)

Hi,

wenn sich die CSV-Datei unter der gleichen Domain befindet, könntest du mittels eines AJAX-Requests Zugriff auf den Inhalt bekommen.

Beispiel:

```
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<script type="text/javascript">
  <!--
var xmlHttp = false;

function instanceRequest(){
  if(window.XMLHttpRequest){
    xmlHttp = new XMLHttpRequest();
  }else if(window.ActiveXObject){
    try{
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
      try{
      	xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }catch(e){}
    }
  }

  if(!xmlHttp){
    alert('Es konnte keine XMLHTTP-Instanz erzeugt werden!');
    return false;
  }
}

function theRequest() {
  // Falls noch ein Request-Objekt existiert -> zunächst beenden
  if(xmlHttp && xmlHttp.readyState){
    xmlHttp.abort();
    xmlHttp = false;
  }

  if(!xmlHttp){
    instanceRequest();
  }

  // POST-Request
  xmlHttp.open('get', 'test.csv', true);

  xmlHttp.onreadystatechange = function () {
    if(xmlHttp.readyState == 4){
      if(xmlHttp.status == 200){
        document.getElementById("outID").innerHTML = xmlHttp.responseText;

        // Sonstige Bearbeitungen
      }
    }
  };

  // Request absetzen
  xmlHttp.send();

}
 //-->
</script>
</head>
<body>
<button onclick="theRequest();">Request</button>
<div id="outID"></div>
</body>
</html>
```
 
Ciao
Quaese


----------



## Sven Mintel (1. August 2009)

Moin,

nur der Vollständigkeit halber, aber vielleicht nützt es dir ja bei deiner Anwendung: Microsoft-Datenabindung..funktioniert natürlich nur im InternetExplorer


----------



## dtm (2. August 2009)

Quaese hat gesagt.:


> Hi,
> 
> wenn sich die CSV-Datei unter der gleichen Domain befindet, könntest du mittels eines AJAX-Requests Zugriff auf den Inhalt bekommen.
> 
> ...



Das läuft bei mir nicht 
aber

```
<script type="text/javascript" language="javascript">
// FileRead
/*
Mozilla 0.9.6, Linux (Debian).
Mozilla 0.9.7, NT4.
Mozilla 0.9.8, Linux (Red Hat 7.1).
Mozilla 0.9.9, Win2000.
Mozilla 0.9.9, NT4.
Mozilla 0.9.9, Linux (Red Hat 7.2).
Mozilla 1.0 RC1, FreeBSD.
Netscape 6.1, NT4.
Netscape 6.2.1, Win2000.
Netscape 6.2.2, Win2000.
Netscape 6.2.2, NT4.
Netscape 6.2.2, Linux (Debian).
Netscape 7 Win2000
Netscape 8 Win2000
Firefox 1.07 Win2000
Firefox 1.5 Win2000
Opera 8.51 Win2000
Avant Browser 10 Win2000
Internet Explorer 6.0 SP1 Win2000
Internet Explorer 7.0 Windows Vista
*/


function ReadFile(fileUrl) {
    var req;
    var fileContent;
    // branch for IE/Windows ActiveX version
    if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        req.open("GET", fileUrl, false);
        req.onreadystatechange=function() {
                                    if (req.readyState == 4) {
                                        fileContent = req.responseText;
                                    }
                                }
        req.send(null);
    // branch for native XMLHttpRequest object
    } else if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.open("GET", fileUrl, false);
        req.send(null);
        fileContent = req.responseText;
    }
    return fileContent;
}// FileRead End


alert(ReadFile("test.csv"));
</script>
```

geht.
Das habe ich irgendwo gefunden aber noch nicht ganz kapiert.

Wie kann ich aber nur ab einer gewissen Position (z.B. Byte 400) einlesen.
Geht das überhaupt?


----------



## Quaese (2. August 2009)

Hi,

das von dir gepostete Script funktioniert ähnlich wie meins - mit dem Unterschied, es führt einen synchronen Request aus (drittes Argument in open-Methode).

Ab einer bestimmten Position einzulesen ist nicht möglich, zumindest ist mir keine Möglichkeit bekannt.
Aber vielleicht kannst du dich über die Variablengrösse annähern. Ein String ist als endliche Sequenz von Null oder mehr vorzeichenlosen 16-Bit Integerwerten definiert. Damit könnte es möglich sein, ein Offset zu berechnen. Einfach mal versuchen.

Ciao
Quaese


----------

