Tengo un archivo .txt como entrada y me gustaría guardarlo en una matriz de 2 dimensiones

Entrada de ejemplo:

21 16 91 // 1er bloque de datos

22156106 // 2do bloque de datos

23 120 164 // 3er bloque de datos

24 159 207 // etc.

25 168 83

26 83 27

27 189 29

Código hasta ahora:

function leseConfig (input) {
 if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {

};

¿Cómo puedo lograr lo que busco?

¿Quizás alguien me puede dar un breve ejemplo de hacer algo como esto?

2
CodeFanatic 3 sep. 2014 a las 16:43

2 respuestas

La mejor respuesta

Para leer realmente el archivo input después de la preparación reader, puede usar

reader.readAsText(input.files[0]);

Para obtener el texto del archivo leído dentro de reader.onload puede usar

reader.result

Fiddle.

Entonces tener HTML:

<input id="file" type="file"/>
<input id="read" type="button" value="read"/>

Puedes usar algo como esto:

$(document).ready(function()
{
    $('#read').click(function()
    {
        leseConfig($('#file')[0]);
    });
});

function leseConfig(input)
{
    if (input.files && input.files[0])
    {
        var reader = new FileReader();
        reader.onload = function()
        {
            var arr = [];
            var rows = reader.result.split('\n');
            for (var i = 0; i < rows.length; i++)
            {
                var elements = rows[i].split(/\s/);
                if (elements.length >= 3)
                {
                    arr.push([elements[0], elements[1], elements[2]]);
                }
            }
            handleArray(arr);
        }
        reader.readAsText(input.files[0]);
    }
};
1
Regent 3 sep. 2014 a las 13:43

Esta es una manera simple de convertir su archivo en matriz 2D:

var array;
function leseConfig (input) 
{
     if (input.files && input.files[0]) 
     {
        var reader = new FileReader();
        reader.onload = function (e) 
        {
            array = e.target.result.split('\n');
            for(key in array)
                array[key] = array[key].split(' ');
        }
     }
}
0
Khalid 3 sep. 2014 a las 13:46