Как написать способ «отступа» строки в текстовом документе

#javascript #text #siemens #wincc

Вопрос:

Я создаю сценарии в WinCC unified, где используется javascript, у меня есть код, который находит определенные 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 ввод свойства из массива не остановит использование этой строки при вводе .join :

 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') даст вам то, что вы хотите.

Комментарии:

1. Большое вам спасибо. Я попробовал это, и хотя он правильно делает то, что я хочу, в текстовом файле, часть, которая считывает текстовый файл и сохраняет эти данные в массивы тегов HMI, теперь сломана и не обновляется при удалении текстового файла. Извините, я новичок в stackoverflow, поэтому я не знаю, как отправить вам код, чтобы вы увидели, как я читаю текстовый файл. Я просто отвечу себе, я думаю, так как у меня недостаточно персонажей в этом комментарии

2. Поскольку вы удалили 3 строки, похоже, вам может потребоваться уменьшить maxNoteNumber их на 3, прежде чем снова читать файл? maxNoteNumber -= 3 ?

3. На самом деле он правильно читает файл. Но это выходит из строя, когда у меня нет «пустого места» в том месте, где его читают. Поэтому, когда я открыл текстовый документ и просто удержал клавишу enter, затем сохранил и перезагрузил свою программу, она работает правильно. Но это действительно странно, потому что раньше у меня не было этой проблемы.

4. Что именно вы имеете в виду под «вылетает»? Что произошло и чего вы ожидали?

5. Ну, в основном код работает так: каждые 3 строки он считывает данные в 3 разных массива для даты, имени и примечания. Как эта строка 0. — дата[0], строка 1 — имя[0], строка 2 — примечание[0], строка 3 — дата[1], строка 4 — имя[1] ,… Таким образом, у меня было бы 3 больших массива данных, которые считывались бы из «назначенного» места, и если бы в этой строке не было текста, она вернула бы пустую строку, что я и хотел. Теперь, когда я использую сращивание для удаления текста, я ожидал, что каждое значение массива переместит свою позицию назад на 1.