从javascript中的txt文件读取值

从javascript中的txt文件读取值,javascript,sed,Javascript,Sed,我有一个简单的html文件,其中包含引用google图表的javascript代码 我使用的代码如下(我将显示重要部分): 我使用bash命令(sed)将22.75的值替换为.txt文件最后一行中的新值。然而,这带来了一些错误,我既不能纠正,也无法识别 那么,是否有任何javascript代码可以获取该文件,提取最后一个值并简单地将其显示在代码的正确位置 更新: 很抱歉在这个问题上缺乏信息,我真的很感谢所有花时间阅读我的问题的人。在接下来的几分钟里,我将尝试填写更多信息 我能够提取.txt文件的

我有一个简单的html文件,其中包含引用google图表的javascript代码

我使用的代码如下(我将显示重要部分):

我使用bash命令(sed)将22.75的值替换为.txt文件最后一行中的新值。然而,这带来了一些错误,我既不能纠正,也无法识别

那么,是否有任何javascript代码可以获取该文件,提取最后一个值并简单地将其显示在代码的正确位置

更新:

很抱歉在这个问题上缺乏信息,我真的很感谢所有花时间阅读我的问题的人。在接下来的几分钟里,我将尝试填写更多信息

我能够提取.txt文件的最后一行,提取“-”符号右侧的值,并将其存储在变量中。然后使用sed命令获取该值以更新html文件。当值更新但没有值时,会出现错误。我猜这是由于txt文件中的温度记录失败造成的,然后提取的值为空。最后,带有javascrit代码的html领域恰巧是这样的:

<!DOCTYPE html>
<html><head>
  <!-- your header code -->

<script type="text/javascript">
//parts of your javascript

<?php                                // start php script
$logFile= '/pathToYour/logFile.log'; // <-Modify
if( $fp= @fopen($logFile, "r") ){    // if logfile succesfully opened,
    fseek($fp, -30, SEEK_END);       // set pointer 30 chars from EOF
    $val= array_pop(explode("-", rtrim(fread($fp, 30))));  //get last value
    fclose($fp);                     // close file
} 
?>                                   // end php script

function drawChart(){
  var data=google.visualization
                 .arrayToDataTable([ ['Label', 'Value'],
                                     ['Temp', <?php echo $val? $val : "0"; ?>],
                                   ]);     // ^php above inserts value or 0

  // etc...
}

//parts of your javascript
</script>

</head><body>

  <!-- your body code -->

</body></html>
(…)['Temp',],

然后更新程序无法更新该值,因为由于sed命令的编写方式,我想它无法检测到其中的no number值。因此html始终没有值

TXT文件结构:

(……)
20:25:03-23.312
20:26:02-23.312
20:27:03-23.375
20:28:03-23.375
20:29:02-23.375
20:30:02-23.312

Bash脚本:

# (...code...)
lastRecord=`cat /home/pi/scripts/temp_control/logs/"$today".log | awk 'END{print}'`

function rightNow {
  lastTemp=`echo $lastRecord | cut -d'-' -f2`

  timeOfTemp=`echo $lastRecord | cut -d'-' -f1` # Not used yet

  #Command used to update
  sed -i "s/['Temp', [0-9]\{1,2\}.[0-9]\{1,3\}]/$lastTemp]/" /var/www/rightnow.html
}

rightNow

您可以像其他ajax请求一样获取文件

使用javascript

var request = new XMLHttpRequest();
request.open('GET', 'public_path_to_file.txt', false);
request.send();

var textFileContent = request.responseText
使用jQuery

var textFileContent;
$.get('public_path_to_file.txt', function(data) {
  textFileContent = data;
});
左边是从
textFileContent
获取右边的部分。根据文件的结构,我们可以用不同的方法来实现这一点。没有一个示例文件,您只能靠自己,但这里有一些示例

如果你需要最后一行

如果你需要使用正则表达式


您可以像其他ajax请求一样获取文件

使用javascript

var request = new XMLHttpRequest();
request.open('GET', 'public_path_to_file.txt', false);
request.send();

var textFileContent = request.responseText
使用jQuery

var textFileContent;
$.get('public_path_to_file.txt', function(data) {
  textFileContent = data;
});
左边是从
textFileContent
获取右边的部分。根据文件的结构,我们可以用不同的方法来实现这一点。没有一个示例文件,您只能靠自己,但这里有一些示例

如果你需要最后一行

如果你需要使用正则表达式


首先,我假设您最终希望使用浏览器读取本地文件,而您当前的工作流类似于本地的“bash脚本”,可以

  • 首先更新/修改javascript的内联部分(在本地存储的html中) 从本地txt文件(使用sed)检索的最后出现的值
  • 在普通浏览器中打开(刚刚修改的html-)文件(通过命令行)
  • 然后我假设sed路由曾经工作过,但现在不再工作了(可能是因为html文件已经更改了?),现在您希望内联javascript(在html文件中)从文本文件本身获取该值,然后使用它(因此不需要“bash script”/sed解决方案)

    因此,您最后一个问题的答案(基于上述假设):“是否有任何javascript代码获取该文件,提取最后一个值并简单地将其显示在代码的正确位置?”取决于您的最终要求:
    在每次查看html文件时选择文本文件的文件输入中,您是否满意

    如果您的答案是肯定的,那么(取决于您使用的浏览器),您可以阅读本地文件(并对其内容施展您的魔法)。
    在现代浏览器中,使用(在HTML5中添加到DOM中)web内容现在可以要求用户选择本地文件,然后读取这些文件的内容

    例如,使用FireFox的“”,您可以执行以下操作:

    html:

    请注意,要访问Chrome中的本地文件,必须使用以下开关启动Chrome:
    Chrome--禁用web安全性

    然而,
    如果答案是否定的(因此您希望在“代码”中指定文件,更重要的是它的路径,这样您就不必每次运行本地应用程序时都选择文本文件),那么您(通常)就不能(因为您,感谢伟大的制作者)…
    除非您选择一个特定的旧版/未修补的浏览器(专门用于此任务),在该浏览器中,您知道一种(黑客)方法来执行此操作(如IE或or等),否则您将了解情况

    一些替代解决方案(不需要您反复选择正确的文本文件)

  • 设置一个完整的web(LAMP)服务器(使用aross answer中使用的XMLHttpRequest方式,但这可能感觉像是用大炮向蚊子射击……)
  • 探索不同的脚本语言(但仍然有效地执行与现在已损坏的sed解决方案相同的操作)
  • 组合1和2,从php中选择(最新版本包含一个小型Web服务器,您可以在需要时启动/停止它(甚至在bash脚本工作流中),或者使用node.js(它是“javascript”,您可以在几行代码中编程/控制一个小型任务特定的服务器)
  • 希望这有帮助


    更新:
    根据您更新的问题、评论和推荐请求,我建议您使用PHP从日志txt文件中动态获取值,并让它使用内嵌javascript动态生成html代码(每次访问页面时)

    浏览器永远不会看到php代码,只会看到php插入到页面中的内容(在本例中是最后找到的值或0)

    您可以将
    rightnow.html
    文件重命名为
    rightnow.php
    ,并对其进行如下修改:

    
    //javascript的一部分
    //结束php脚本
    功能图(
    
    <input type="file" id="fileinput" multiple />
    
    function readAllFiles(evt){
        var files = evt.target.files, i = 0, r, f;
        if(files){
            for(; f = files[i++]; ){
                r = new FileReader();
                r.onload = (function(f){
                    return function(e){
                        alert(e.target.result);
                    };
                })(f);
                r.readAsText(f);
            }
        } else {
            alert("Error loading files");
        }
    }
    document.getElementById('fileinput')
            .addEventListener('change', readAllFiles, false);
    
    <!DOCTYPE html>
    <html><head>
      <!-- your header code -->
    
    <script type="text/javascript">
    //parts of your javascript
    
    <?php                                // start php script
    $logFile= '/pathToYour/logFile.log'; // <-Modify
    if( $fp= @fopen($logFile, "r") ){    // if logfile succesfully opened,
        fseek($fp, -30, SEEK_END);       // set pointer 30 chars from EOF
        $val= array_pop(explode("-", rtrim(fread($fp, 30))));  //get last value
        fclose($fp);                     // close file
    } 
    ?>                                   // end php script
    
    function drawChart(){
      var data=google.visualization
                     .arrayToDataTable([ ['Label', 'Value'],
                                         ['Temp', <?php echo $val? $val : "0"; ?>],
                                       ]);     // ^php above inserts value or 0
    
      // etc...
    }
    
    //parts of your javascript
    </script>
    
    </head><body>
    
      <!-- your body code -->
    
    </body></html>
    
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type='text/javascript' src='https://www.google.com/jsapi'></script>
    
    <script type='text/javascript'>
    
      // Needed this var so that I could use it in other places of the code 
      var t;
    
      jQuery.get('http://url_to_my_rpi/file_to_download.txt',function(data){
      console.log(data)
    
      t=data;
    
      },'text');    
    
      google.load('visualization', '1', {packages:['gauge']});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
    
        t=eval(t);
    
        var data = google.visualization.arrayToDataTable([
          ['Label', 'Value'],
          ['Temp', t],]);
    
       // (... more javascript with Google Charts options, display parameters..)
    
    </script>