read/write csv 文件使用 javascript in .htm

read/write csv file using javascript in .htm

简介: 我正在尝试创建一个 html 应用程序 (.htm) 来进行一些业务计算。随之而来的问题是我需要保留所有记录。 首先,我找到了一些 read/write .mdb 文件的可视化基本脚本,但这对我来说太复杂了,因为我从未使用过 vbs。 所以,我决定使用 javascript 到 read/write .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

如果您想附加到文件而不覆盖现有内容,您可以使用 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. 关闭两个文件,并重命名新文件以替换旧文件

话虽如此,如果您的数据文件是 HTML 或 XML 文档而不是 CSV 文件,也许对您来说会更容易,因为您随后可以使用 DOM 操作功能来读写它。

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

以下是 "lines" 在文本文件中的工作方式。它只是一长串字符,其中一个可能的字符是换行符。当您查看文件时,无论什么程序呈现该文件,它都知道在换行符之后的任何文本下方显示文本。您可以将您读取的字符串拆分为换行符,并获得一个代表每一行的数组并以这种方式使用它。然后写你会通过换行符加入那个数组并写出结果字符串。

请注意,某些程序需要 "\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。 通过了解换行符在文本中的工作方式来编辑文本格式文件中的各个行。