从javascript中的txt文件读取值
我有一个简单的html文件,其中包含引用google图表的javascript代码 我使用的代码如下(我将显示重要部分): 我使用bash命令(sed)将22.75的值替换为.txt文件最后一行中的新值。然而,这带来了一些错误,我既不能纠正,也无法识别 那么,是否有任何javascript代码可以获取该文件,提取最后一个值并简单地将其显示在代码的正确位置 更新: 很抱歉在这个问题上缺乏信息,我真的很感谢所有花时间阅读我的问题的人。在接下来的几分钟里,我将尝试填写更多信息 我能够提取.txt文件的最后一行,提取“-”符号右侧的值,并将其存储在变量中。然后使用sed命令获取该值以更新html文件。当值更新但没有值时,会出现错误。我猜这是由于txt文件中的温度记录失败造成的,然后提取的值为空。最后,带有javascrit代码的html领域恰巧是这样的:从javascript中的txt文件读取值,javascript,sed,Javascript,Sed,我有一个简单的html文件,其中包含引用google图表的javascript代码 我使用的代码如下(我将显示重要部分): 我使用bash命令(sed)将22.75的值替换为.txt文件最后一行中的新值。然而,这带来了一些错误,我既不能纠正,也无法识别 那么,是否有任何javascript代码可以获取该文件,提取最后一个值并简单地将其显示在代码的正确位置 更新: 很抱歉在这个问题上缺乏信息,我真的很感谢所有花时间阅读我的问题的人。在接下来的几分钟里,我将尝试填写更多信息 我能够提取.txt文件的
<!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脚本”,可以
在每次查看html文件时选择文本文件的文件输入中,您是否满意 如果您的答案是肯定的,那么(取决于您使用的浏览器),您可以阅读本地文件(并对其内容施展您的魔法)。
在现代浏览器中,使用(在HTML5中添加到DOM中)web内容现在可以要求用户选择本地文件,然后读取这些文件的内容 例如,使用FireFox的“”,您可以执行以下操作: html: 请注意,要访问Chrome中的本地文件,必须使用以下开关启动Chrome:
Chrome--禁用web安全性
然而,如果答案是否定的(因此您希望在“代码”中指定文件,更重要的是它的路径,这样您就不必每次运行本地应用程序时都选择文本文件),那么您(通常)就不能(因为您,感谢伟大的制作者)…
除非您选择一个特定的旧版/未修补的浏览器(专门用于此任务),在该浏览器中,您知道一种(黑客)方法来执行此操作(如IE或or等),否则您将了解情况 一些替代解决方案(不需要您反复选择正确的文本文件)
更新:
根据您更新的问题、评论和推荐请求,我建议您使用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>