请高手指点,有一个文本文件,它里面的文件内容如下:(有几万行)Navigator1-1,00-1E-40-7A-A8-CC,ChinaNet-A9R3,ghlqqyrb,192.168.1.1,useradmin,ewxhm,12VDC,1.25A,001E40-46900001E407AA8CC
Navigator1-1,00-1E-40-7A-A6-63,ChinaNet-HTcq,pzt3kpcy,192.168.1.1,useradmin,udd5i,12VDC,1.25A,001E40-4D900001E407AA663
Navigator1-1,00-1E-40-7A-A7-CE,ChinaNet-PGpt,yjavnfvf,192.168.1.1,useradmin,6rzxq,12VDC,1.25A,001E40-4F900001E407AA7CE
Navigator1-1,00-1E-40-7A-A4-C4,ChinaNet-bQVw,iydvciff,192.168.1.1,useradmin,qewgk,12VDC,1.25A,001E40-3D900001E407AA4C4
Navigator1-1,00-1E-40-7A-A5-4D,ChinaNet-4nfe,vt5wsawt,192.168.1.1,useradmin,m6sap,12VDC,1.25A,001E40-3B900001E407AA54D
Navigator1-1,00-1E-40-7A-A6-CA,ChinaNet-qvj5,4s6ejwyj,192.168.1.1,useradmin,zgbe5,12VDC,1.25A,001E40-4A900001E407AA6CA
Navigator1-1,00-1E-40-7A-A5-55,ChinaNet-XjrJ,tq5s2znk,192.168.1.1,useradmin,sdxsy,12VDC,1.25A,001E40-4B900001E407AA555
Navigator1-1,00-1E-40-7A-A5-4F,ChinaNet-g6Du,fz9vsxv2,192.168.1.1,useradmin,udjau,12VDC,1.25A,001E40-39900001E407AA54F
Navigator1-1,00-1E-40-7A-A5-8B,ChinaNet-amDf,tr3njmjp,192.168.1.1,useradmin,zxfmf,12VDC,1.25A,001E40-31900001E407AA58B
………………………………要求,客户从页面上输入一个值:00-1E-40-7A-A5-8B,利用javascript 技术根据页面传来的值,从文本文件中将00-1E-40-7A-A5-8B找到,并将其所在行的内容全部显示出来,
请高手帮忙,javascript如何将文本文件的数据逐行读取保存到一个数组中(容器),然后再对这个数组进行操作,找到指定的值并将其所在行的内容显示出来。
只用javascript,不要java的,java的我会写。

解决方案 »

  1.   

    转成dom 或者 json  或者xml 数据读取 
      

  2.   

    var arr = textstr.split("\n");function find_arr( str )
    {
        for( var i=0;i<arr.length;i++)
        {
            if( arr[i].indexof(str) )
               return arr[i];
        }
        return "没有找到";
    }alert( find_arr("00-1E-40-7A-A5-8B") );
      

  3.   

     不好意思,我对javascript代码一点都不懂,请兄弟能否给点详细一点的代码。我先把我的代码贴出来,请高手帮忙添加……<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>读MAC号软件</title><style>
     table {
      border:2 groove blue;
      position:absolute;
      top:100;
      left:300;
     }
     td {
      border:1 ridge green;
     } 
    </style>
    <script language="javascript">
    function ck(obj){if(obj.value.length>0){
    var af="txt,xls"; //设置文件的后缀名;
    if(eval("with(obj.value)if(!/"+af.split(",").join("|")+"/ig.test(substring(lastIndexOf('.')+1,length)))1;")){alert("您选择的文件格式不符合要求!\n\n系统只接受:"+ af +"格式文件");obj.createTextRange().execCommand('delete')};
    }}
    //obj.form.reset()
    </script>
    </head>
    <body><table width="437" height="157" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr><td width="433" height="28">
    <input size="40" id="path" type="file" onpropertychange="ck(this)"></input><button onclick="view()">打开</button></td></tr><br/><tr> <td id="content" height="23"></td></tr>
    </table><script language="javascript">
    function view()
    {
    var fso, f1, ts, s ,file,str; 
    file = document.getElementById("path").value;
    var ForReading = 1; 
    fso = new ActiveXObject("Scripting.FileSystemObject"); 
    ts = fso.OpenTextFile(file, ForReading ,false); 
    // 这里新建一个数组 
             var array = new Array(); 
    while(!ts.AtEndOfLine)   
            {   
               请高手再这里帮我添加代码,谢谢了。
                 将ts.ReadLine()的内容添加到数组 array 中,然后再遍历 array数组,将 00-1E-40-7A-A5-8B从array数组找到,显示出来就行了。

            }    document.getElementById("content").innerHTML= s ; 
    alert("File contents = '" + s + "'"); // 显示字符串信
    ts.Close();   
    }
    </script>
    </body>
    </html>
      

  4.   

    访问文本文件不需要fso, 可以直接通过iframe的src来访问: ifrm.src = "xxx/xxx.txt";下面这个例子是拿以前写的vm的调试页面改的,有点乱,将就看一下吧.<body style="margin:5px;font-size:10pt;">
    <iframe id="readfile" style="display:none;"></iframe>
    <textarea id="rfcode" name="rfcode"  style="                   width:700px;height:480px;overflow:scroll;border-width:1;border-style:solid;border-color:#CADCDF;font-size:10pt;" wrap="off" ></textarea><!--font-family:Courier New;-->
    <div id="p_display" name="p_display" style="top:6px;left:705px;width:280px;height:478px;overflow:scroll;border-width:1;border-style:solid;border-color:#CADCDF;position:absolute;white-space:nowrap;" >&nbsp;</div>
    <br/>
    <label >FileName/URL:<input type="text" name="acodes" id="acodes" value="1.txt" onKeyPress="if(event.keyCode==13){loadcode();}"/></label>
    <input type="submit" name="Submit2" value="加载脚本" onClick="loadcode();"/>
    <input type="submit" name="Submit"  value="测试脚本" onClick="coderun();"/>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <label >输入要查找的类容:<input type="text" name="fid" id="fid" value="" onKeyPress="if(event.keyCode==13){findstr();}"/></label>
    <input type="submit" name="Submit3" value="查找" onClick="findstr();"/>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <input type="submit" value="清除记录" onClick="document.getElementById('p_display').innerHTML='';"/>
    </body>
    <script>
    var fobj    = document.getElementById( "readfile" );
    var codebox = document.getElementById( "rfcode"   );
    var dplay   = document.getElementById( "p_display");
    var find_in = document.getElementById( "fid"      );
    var arr;     function loadcode()
        {   try
            {
                if( document.getElementById("acodes").value == "" )
                    fobj.src = "1.txt" ;
                else
                    fobj.src = document.getElementById("acodes").value;
            }catch(e)
            {        }
        }
        function getCodes()
        {
            try
            {
                if(fobj.contentWindow.document.body.innerHTML!="")
                {   var textnode = fobj.contentWindow.document.body.firstChild.childNodes.item(0);
                    codebox.value = textnode.nodeValue.toLowerCase() ;
                    arr = textnode.nodeValue.toLowerCase().split("\n");
                }
           }catch(er)
           {   alert("没有代码可获取"); }
        }
        function find_arr( str ) 
        { 
            for( var i=0;i <arr.length;i++) 
            { 
                if( arr[i].indexOf(str)!=-1 ) 
                  return arr[i]; 
            } 
            return "没有找到";
            
            /* 如果你想匹配所有的,就把这里改一下: 
            var arr_rs
            for( var i=0;i <arr.length;i++) 
            { 
                if( arr[i].indexOf(str)!=-1 ) 
                  arr_rs.push( arr[i] ); 
            }
            if(arr_rs.length)
                return arr_rs;
            else
                return "没有找到"; */
        }
        
        function findstr( )
        {
            alert( arr[0] );
            dplay.innerHTML+= find_arr( find_in.value.toLowerCase() )+ "<br/>";
        }
        
        if( typeof(fobj.onreadystatechange)=="object" ) //IE
            fobj.onreadystatechange = function ()
            {   if(fobj.readyState=="complete")
                    getCodes();
           };
        else                                            //FireFox
            fobj.onload = function ()
            {   getCodes();
            };
        
        if( window.navigator.appName.localeCompare( "Netscape" )!=0 ) //IE
            document.getElementById('p_display').style.height="480px";
        document.getElementById('p_display').innerHTML='';
        //loadcode();//一打开页面就加载文本文件
        
    </script>
      

  5.   


        function findstr( )
        {
            //把这个去掉,刚才忘去掉了
            alert( arr[0] );
            dplay.innerHTML+= find_arr( find_in.value.toLowerCase() )+ "<br/>";
        }
      

  6.   

      非常感谢 darkfox123的热情回复,还贴出代码,再次表示感谢。
      不过你的代码有点问题, 运行到getCodes()方法时,提示 "没有代码可获取",即if里的代码没被执行。我用的是IE浏览器。
     function getCodes()
        {
            try
            {
                if(fobj.contentWindow.document.body.innerHTML!="")
                {   var textnode = fobj.contentWindow.document.body.firstChild.childNodes.item(0);
                    codebox.value = textnode.nodeValue.toLowerCase() ;
                    arr = textnode.nodeValue.toLowerCase().split("\n");
                }
              }catch(er)
              {   alert("没有代码可获取"); }
      

  7.   

    这段代码是支持ie7(sp3)和firefox的.如果你只需要支持ie,那么改成下面的代码就可以了:
    codebox.value = fobj.contentWindow.document.body.innerText.toLowerCase();
    arr = fobj.contentWindow.document.body.innerText.toLowerCase().split("\n");
      

  8.   

    有几万行?那建议你不要用数组了,把处理交个服务端的java来处理吧
      

  9.   

    function view() 

    var fso, f1, ts, s ,file,str; 
    file = document.getElementById("path").value; 
    var ForReading = 1; 
    fso = new ActiveXObject("Scripting.FileSystemObject"); 
    ts = fso.OpenTextFile(file, ForReading ,false); 
    // 这里新建一个数组 
            var array = new Array(); 
    while(!ts.AtEndOfLine)  
            {  
             if(ts.readLine().indexOf(str)>0){
    alert(ts);
    }
            }  document.getElementById("content").innerHTML= s ; 
    alert("File contents = '" + s + "'"); // 显示字符串信 
    ts.Close();