2014-09-04 2 views
0

La documentation Scilab pour csvRead indique qu'il est possible à la fois de spécifier une plage (de ligne, col à ligne, col) et le nombre de lignes d'en-tête à ignorer. Cependant, je peux seulement sembler faire un à la fois.Est-il possible de spécifier à la fois la plage et l'en-tête dans csvRead de Scilab?

C'est ce que je fais (basé sur l'un des exemples de la documentation, en utilisant Scilab 5.5.0). Tout d'abord, créez un fichier CSV à relire:

CSV = ["1,0,0,0,0"; 
    "0,1,0,0,0"; 
    "0,0,1,0,0"; 
    "4,4,1,2,0"; 
    "4,63,1,2,0"; 
    "4,63,1,4,233"; 
    "42,3,23,2,23"; 
    ]; 
    filename = fullfile(TMPDIR , 'foo.csv'); 
    mputl(CSV, filename); 

Maintenant, relire les données de la ligne 2, colonne 1 à la ligne 5, col 4:

csvRead(filename, [], [], "double", [], [], [2 1 5 4]) 

Cela donne le résultat

ans = 

    0. 1.  0. 0. 
    0. 0.  1. 0. 
    4. 4.  1. 2. 
    4. 63. 1. 2. 

Supposons maintenant que je souhaite ignorer la première ligne de mon fichier CSV (il peut contenir des informations d'en-tête sans importance). Je voudrais écrire:

csvRead(filename, [], [], "double", [], [], [], 1) 

Ce qui donne le résultat

ans = 

    0.  1.  0.  0. 0.  
    0.  0.  1.  0. 0.  
    4.  4.  1.  2. 0.  
    4.  63. 1.  2. 0.  
    4.  63. 1.  4. 233. 
    42. 3.  23. 2. 23. 

Tout bien jusqu'à présent. Si je veux sauter la première ligne et seulement une partie de stockage de la matrice, je suppose que je pourrais écrire:

csvRead(filename, [], [], "double", [], [], [2 1 5 4], 1) 

Mais cela donne la même réponse que précédemment, à savoir que la ligne d'en-tête est supprimé et la plage est ignorée :

ans = 

    0.  1.  0.  0. 0.  
    0.  0.  1.  0. 0.  
    4.  4.  1.  2. 0.  
    4.  63. 1.  2. 0.  
    4.  63. 1.  4. 233. 
    42. 3.  23. 2. 23. 

Est-il possible de spécifier à la fois une plage et un en-tête? Je ne fais que bricoler avec Scilab, il manque peut-être quelque chose d'évident.

Répondre

0

Je suis sûr que c'est un bug dans scilab, parce que si je regarde dans la source je vois, que le 7ème paramètre (plage) n'est pas évalué, si le 8ème paramètre (en-tête) est donné. C'est un simple bogue causé par un mauvais opérateur de comparaison (== au lieu de> =).

+0

J'allais ajouter ceci sur le tracker Scilab mais vous (je présume!) Me battre, merci pour la confirmation. – ClickyKeys

Questions connexes