Bonjour,
Débutant en Javascript, je développe une Chrome App et cherche à lire ligne par ligne un fichier texte (présent sur l'ordi) qui peut être lourd et à effectuer des traitements de reconnaissance de données dessus. (Plus concrètement, il s'agit d'un fichier .dxf).
Pour le moment, j'utilise .readAsText(file) qui me donne une grande chaîne que je splitte ensuite dans un tableau de lignes, mais ce n'est pas du tout optimisé, tout est chargé en mémoire alors que je voudrais travailler en ouvrant le fichier et en lisant ligne par ligne.

Sauriez-vous me dire comment faire? Merci pour votre aide.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function chooseFileToOpen() {
  chrome.fileSystem.chooseEntry(
    {
      type: 'openFile', accepts:[
        { extensions: ["dxf"] }
      ] 
    }, 
    function(fileEntry) {
      if (!fileEntry) {
        console.log("User did not choose a file");
        return;
      }
      fileEntry.file(function(file) {
        var reader = new FileReader();
        reader.onload = function(e) {          //on définit dans .onload ce qu'il faut faire une fois le fichier chargé
          fullStringToLines(e.target.result);
        };
        reader.onabort = function(e) {
          console.log("Chargement du fichier interrompu");
        };
        reader.onerror = function(e) {
          console.log("Une erreur est survenue au chargement du fichier");
        };
        reader.readAsText(file);
        console.log("Fichier en cours de chargement");
      });
    }
  );
}
function calcLines(fullString) {
  var lines = fullString.replace(/\r\n/g, "\n").split("\n"); //remplace \r\n par \n puis on coupe à chaque \n
  for (var i = 0; i < lines.length; i++) {
    lines[i] = lines[i].replace(/^\s+|\s+$/g,''); //trime les espaces de part et d'autre de la chaine
  }
  var nbr = 0, object = 0, nbr_hidden_layer = 0, nbr_block = 0;
  var visible;  //boolean
  var nameLayer = [];
  var nameBlock = [], posBlockInFile = [], offsetBlockX = [], offsetBlockY = [];
  for (i = 0; i < lines.length; i++) {
    type = 9999;
    visible = true;
    if (lines[i] == "LAYER") {
      while(lines[i+1] !== "" && type !== 0) {  
	i++;                                    
	type = parseInt(lines[i]);        
	if (type === 0)	{            
...