我如何编写一种方法来“退格”文本文档中的一行
Posted
技术标签:
【中文标题】我如何编写一种方法来“退格”文本文档中的一行【英文标题】:How do i write a way to "backspace" a line in a text document 【发布时间】:2021-03-22 16:51:46 【问题描述】:我在使用 javascript 的 WinCC 统一中创建脚本,我有一些代码在文本文件中找到特定的 3 行并删除那里的值,它可以工作,但我也希望基本上删除整行,就好像你是当文本行上没有文本时按退格键。
代码
HMIRuntime.FileSystem.ReadFile(path, "utf8").then(
function(text)
const lines = text.split('\n');
delete lines[noteNumber];
delete lines[noteNumber+1];
delete lines[noteNumber+2];
//HMIRuntime.Trace("lines:" +lines.join('\n'));
FileSystem.WriteFile(path, lines.join('\n'),"utf8" )
);
感谢您的热心帮助。
我已经尝试过拼接,但是现在读取 .txt 文件并将其数据写入 HMI 数组的部分没有更新,并且不再读取值。读取 .txt 文件的代码在这里
HMIRuntime.FileSystem.ReadFile(path, "utf8").then(
function(text)
for (let i = 0; i < maxNoteNumber; i++)
HMIRuntime.Trace("Trace Message"+ text.split('\n',i));
Tags('strDate[' + i + ']').Write(text.split('\n')[i*3]);
Tags('strName[' + i + ']').Write(text.split('\n')[i*3+1]);
Tags('strNote[' + i + ']').Write(text.split('\n')[i*3+2]);
).catch(function(errorCode)
HMIRuntime.Trace("read error:" + errorCode)
for (let i = 0; i <= maxNoteNumber; i++)
Tags('strNote[' + i + ']').Write('\n')//emty overwrite
//create a emtpy file
HMIRuntime.FileSystem.WriteFile(path," ", 'utf8').then(
function()
HMIRuntime.Trace('Write file finished sucessfully');
).catch(function(errorCode)
HMIRuntime.Trace('Write failed errorcode=' + errorCode);
);
);
【问题讨论】:
【参考方案1】:delete
ing 数组中的属性不会阻止该行在 .join
ing 时被使用:
console.log(
[1, , 3].join('\n')
);
const arr = [1, 2, 3];
delete arr[1];
console.log(
arr.join('\n')
);
拼接你想要删除的线:
lines.splice(noteNumber, 3);
然后lines.join('\n')
会给你你想要的。
【讨论】:
非常感谢。我尝试了它,虽然它在文本文件中正确执行了我想要的操作,但现在读取文本文件并将该数据保存到 HMI 标签数组中的部分已损坏,并且在我删除文本文件时不会更新。抱歉,我是 *** 的新手,所以我不知道如何将代码发送给您,以查看我如何阅读文本文件。我想我只是回复自己,因为我在此评论中没有足够的字符 由于您删除了 3 行,听起来您可能想在再次读取文件之前将maxNoteNumber
减 3? maxNoteNumber -= 3
?
它实际上正确地读取了文件。但是当我在读取它的位置没有“空白空间”时,它就会出错。因此,当我打开文本文档并按住 Enter 键,然后保存并重新加载我的程序时,它可以正常工作。但这真的很奇怪,因为我以前没有这个问题。
你到底是什么意思,“bugs out”?发生了什么,您预计会发生什么?
好吧,基本上代码的工作方式是这样的:每 3 行它会将数据读取到 3 个不同的数组中,以获取日期、名称和注释。就像这行 0. - date[0], line 1 - name[0], line 2 - note[0], line 3 - date[1], line 4 - name[1] ,... 所以我会有3个大型数据数组,将从其“指定”位置读取,如果该行上没有文本,它将返回一个空字符串,这正是我想要的。现在,当我使用拼接删除文本时,我希望每个数组值都将其位置向后移动 1。以上是关于我如何编写一种方法来“退格”文本文档中的一行的主要内容,如果未能解决你的问题,请参考以下文章
Javascript / Jquery识别文本文档中的每一行[重复]
sklearn - 从文本文档中预测多标签分类中的前 3-4 个标签