在.htm

时间:2016-01-03 10:38:51

标签: javascript csv text hta

简介: 我正在尝试制作一个html应用程序(.htm)来进行一些业务计算。问题是我需要保留所有内容的记录。 首先,我发现了一些用于读取/写入.mdb文件的可视化基本脚本,但这对我来说太复杂了,因为我从未使用过vbs。 所以,我决定用javascript来读/写.csv文件

这是我找到的阅读功能:

            function displayClassList() {
            var path="log.csv"
            var fso = new ActiveXObject('Scripting.FileSystemObject'),
            iStream=fso.OpenTextFile(path, 1, false);
            document.getElementById("searchResults").innerHTML="";
            while(!iStream.AtEndOfStream) {
                var line=iStream.ReadLine();
                document.getElementById("searchResults").innerHTML += line + "<br/>";
            }
            iStream.Close();
        }

效果很好。

我遇到的问题是写作问题。我无法将文本附加到文档中的新行。这是我得到的剧本:

var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var s = fso.CreateTextFile("./ClassList.csv", true); 
s.WriteLine("helloworld"); 
s.Close(); 
} 

此脚本的问题在于它用“helloworld”替换所有现有文本。我想要的是在新的一行写“helloworld”。有什么解决方案吗?

另外,有没有办法编辑特定的行,比如替换x行中的所有文本?

以下是供下载的脚本,以便您可以对其进行测试:http://ge.tt/7u5bDAV2/v/0

2 个答案:

答案 0 :(得分:1)

如果要在不覆盖现有内容的情况下附加到文件,可以使用OpenTextFile方法 - 请注意,您使用的CreateTextFile方法会截断现有内容。

var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var s = fso.OpenTextFile("./ClassList.csv", 8); 
s.WriteLine("helloworld"); 
s.Close(); 

没有简单的方法来修改文本文件的一行,除非您所做的修改使行保持相同的长度,否则如果您的更改更短,则会保留旧行的一部分,如果您的更改时间较长,则会覆盖下一行。

更重要的是,FileSystemObject不支持搜索,这是跳转到特定行所需的。

如果您想修改文件的一行,最好的办法是:

  1. 打开现有文件进行阅读,并创建一个新文件进行编写
  2. 逐行读取现有文件,将要保留的内容写入新文件
  3. 将修改后的行写入需要的新文件
  4. 关闭这两个文件,然后重命名新文件以替换旧文件
  5. 话虽如此,如果您的数据文件是HTML或XML文档而不是CSV,那么您可能会更容易,因为您可以使用DOM操作函数来读取和写入它。

答案 1 :(得分:-1)

通常,您在字符串中使用"\n"来创建新行。它表示JS字符串中的换行符。

以下是“行”在文本文件中的工作方式。它只是一个很长的字符序列,其中一个可能的字符是换行符。无论什么程序在您查看文件时呈现文件,只需知道在其前面的任何文本下面的换行符之后显示文本。您可以拆分由换行符读取的字符串,并获得一个表示每行的数组,并以这种方式使用它。然后写你要用换行符加入那个数组并写下结果字符串。

请注意,某些程序需要"\r\n"来表示正确的换行符,并且不会仅为"\n"呈现新行...因此如果您是新行,请尝试"\r\n"无法使用换行符来处理用于查看文本文件的程序。

编辑:由于您似乎不相信我,我只会用代码向您证明。我用.hta文件做了,但概念是一样的。

制作一个文本文件“myText.txt”和一个带有代码的.hta文件。文本文件包含以下内容:

This is line 1
Line 2
the third line
line 4 and stuff
fifth line

然后在我的代码中,我创建了这两个函数,以便于阅读和写作:

function getFile(fname)
{
    var opener = new ActiveXObject("Scripting.FileSystemObject");
    var pointer = opener.OpenTextFile(fname, 1, true);
    var cont = pointer.ReadAll();
    pointer.Close();
    return cont;
}

function setFile(fname, content)
{
    var opener = new ActiveXObject("Scripting.FileSystemObject");
    var pointer = opener.OpenTextFile(fname, 2, true);
    pointer.WriteLine(content);
    pointer.Close();
}

对于我使用的程序,它使用"\r\n"作为换行符。这就是示例将使用的内容。我只是利用拆分和连接内容字符串来编辑我选择的任何行:

var content = getFile('myFile.txt'); // read it
var lineArr = content.split('\r\n'); // now we have an array of the file's lines
lineArr[2] = 'NEW LINE CONTENT!'; // editing third line (indexed from 0)
var newContent = lineArr.join('\r\n'); // make it text again with newlines
setFile("myFile.txt", newContent); // write it

现在文本文件如下所示:

This is line 1
Line 2
NEW LINE CONTENT!
line 4 and stuff
fifth line

Bam。通过了解换行符在文本中的工作方式,编辑文本格式文件中的各个行。