我如何编写一种方法来“退格”文本文档中的一行

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】:

deleteing 数组中的属性不会阻止该行在 .joining 时被使用:

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 个标签

python查找文本文档中特定间隔位置的字符并替换

如何更改当前系统时间日期并插入到文本文档中

使用 sklearn tf-idf 查找矢量化文本文档中的簇数

在图像文本文档中随机生成合成噪声