如何阅读和;使用javascript解析文件?

时间:2015-01-09 04:04:08

标签: javascript

这是我的代码我正在阅读一个包含纬度和数据的文件经度,我在一个数组中输入文件内容。但我不想存储它的数组,还有其他任何选项,以便我可以存储&处理它。

我正在使用这些lat&在一个for循环中,我将这些传递给一个函数,在一个数组中你不能给出一个延迟所以我想要其他方法

这是我的代码:

  function FileHelper()
    {}
    {
        FileHelper.readStringFromFileAtPath = function(pathOfFileToReadFrom)
        {
            var request = new XMLHttpRequest();
            request.open("GET", pathOfFileToReadFrom, false);
            request.send(null);
            var returnValue = request.responseText;

            return returnValue;
        }
    }

    var pathOfFileToRead = "LatLon.txt";

    var contentsOfFileAsString = FileHelper.readStringFromFileAtPath
    (
        pathOfFileToRead
    );
    **var contentsArray=new Array();
    var contentsArray = contentsOfFileAsString.split('\n');**  




    function main()
    {
        for(i=0;i<contentsArray.length;i++)
        {
            addMarker();
        //  setTimeout(function() { remveh1();}, 2000);  

        }
    }

    function addMarker()
    {
        console.log(contentsArray[i]);
        split_contentArray=contentsArray[i].split(',');
        vehicle_lat=split_contentArray[0];
        vehicle_lng=split_contentArray[1];


         var vehicle = new MQA.Poi({ lat: **vehicle_lat**, lng: **vehicle_lng** });
         var icon = new MQA.Icon('https://cdn2.iconfinder.com/data/icons/gpsmapicons/blue/gpsmapicons07.png', 26, 26);          
         vehicle.setIcon(icon);
         vehicle.setKey("abc");

         map.addShape(vehicle);

        vehicle.setRolloverContent("Vehicle # KA05 9999");

        }




    function remveh1()
    {
        map.removeShape(map.removeShape(map.getByKey("abc"))); 
    };     

1 个答案:

答案 0 :(得分:0)

  

实际上我想要的是,我想要一个延迟黑白显示在地图上的位置。从上面的代码我一次显示所有位置,我想逐个显示它们,我该怎么做

通过(简化)背景,浏览器使用相同的线程来运行JavaScript,就像重绘一样,所以如果你尝试在for循环内更新页面,整个循环将在实际之前完成重绘。您可以使用基于for调用的算法替换setTimeout()来处理此问题。在超时之间,JS是&#34;不活动&#34; (不是技术术语)因此浏览器可以重新绘制。

您的代码包含对您不会显示的功能的调用,因此我只能建议对其进行相当少的更新,将addMarker()更改为接受对标记的引用作为参数而不是依赖于全局contentsArray()i变量,然后在调用main()时重写addMarker()以传递相应的标记对象:

function main() {
    var i = -1;
    (function processNext() {
       if (++i < contentsArray.length) { // if there are markers left
          addMarker(contentsArray[i]);   // add the next one
          setTimeout(function() {        // then delay before
            remveh1();                   // removing it and then
            processNext();               // process the next one
          }, 2000);
       }
    })();
}

function addMarker(marker)
{
    console.log(marker);
    split_contentArray = marker.split(',');

    // rest of your function here unchanged
}

(简体)演示:http://jsfiddle.net/3ao3wved/