Добрый день есть код который отрабатывает как надо но нужно что бы после прочтения и заполнения реквизитов в 1с он удалил прочитанную строчку как это лучше сделать? вот сам код:
МассивФаилов = НайтиФайлы("C:\", "*.txt");
Текст = Новый ТекстовыйДокумент;
Для Каждого Фаил из МассивФаилов Цикл
Текст.Прочитать(Фаил.ПолноеИмя);
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(НомерСтроки);
МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
если объект.реквизит1 = МассивРеквизитов[0] тогда
объект.реквизит2 = МассивРеквизитов[1];
Объект.реквизит3 = МассивРеквизитов[2];
Объект.реквизит4 = МассивРеквизитов[3];
Сообщить(Стр);
конецесли;
КонецЦикла;
(26) будет записано в тот же файл, из которого было чтение.
Вот полный код:
МассивФаилов = НайтиФайлы("C:\", "*.txt");
Текст = Новый ТекстовыйДокумент;
Для Каждого Фаил из МассивФаилов Цикл
Текст.Прочитать(Фаил.ПолноеИмя);
УдаляемыеСтроки = Новый Массив;
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(НомерСтроки);
МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
если объект.реквизит1 = МассивРеквизитов[0] тогда
УдаляемыеСтроки.Добавить(НомерСтроки);
объект.реквизит2 = МассивРеквизитов[1];
Объект.реквизит3 = МассивРеквизитов[2];
Объект.реквизит4 = МассивРеквизитов[3];
Сообщить(Стр);
конецесли;
КонецЦикла;
Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
КонецЦикла;
Текст.Записать(Фаил.ПолноеИмя);
КонецЦикла;
(1) перезаписью самого файла с нужным текстом, который должен остаться.
Только зачем каждую строку? Там очень много строк? Ну хотя бы порциями, а не каждую строчку. Иначе большая часть времени будет уходить на перезапись.
Для надежности можно каждую порцию оборачивать в транзакцию.
УдаляемыеСтроки = Новый Массив;
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(НомерСтроки);
МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
если объект.реквизит1 = МассивРеквизитов[0] тогда
УдаляемыеСтроки.Добавить(НомерСтроки);
объект.реквизит2 = МассивРеквизитов[1];
Объект.реквизит3 = МассивРеквизитов[2];
Объект.реквизит4 = МассивРеквизитов[3];
Сообщить(Стр);
конецесли;
КонецЦикла;
Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
КонецЦикла;
УдаляемыеСтроки = Новый Массив;
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(НомерСтроки);
МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
если объект.реквизит1 = МассивРеквизитов[0] тогда
УдаляемыеСтроки.Добавить(НомерСтроки);
объект.реквизит2 = МассивРеквизитов[1];
Объект.реквизит3 = МассивРеквизитов[2];
Объект.реквизит4 = МассивРеквизитов[3];
Сообщить(Стр);
конецесли;
КонецЦикла;
Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
КонецЦикла;
Текст.Записать(Фаил.ПолноеИмя);
(26) будет записано в тот же файл, из которого было чтение.
Вот полный код:
МассивФаилов = НайтиФайлы("C:\", "*.txt");
Текст = Новый ТекстовыйДокумент;
Для Каждого Фаил из МассивФаилов Цикл
Текст.Прочитать(Фаил.ПолноеИмя);
УдаляемыеСтроки = Новый Массив;
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(НомерСтроки);
МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
если объект.реквизит1 = МассивРеквизитов[0] тогда
УдаляемыеСтроки.Добавить(НомерСтроки);
объект.реквизит2 = МассивРеквизитов[1];
Объект.реквизит3 = МассивРеквизитов[2];
Объект.реквизит4 = МассивРеквизитов[3];
Сообщить(Стр);
конецесли;
КонецЦикла;
Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
КонецЦикла;
Текст.Записать(Фаил.ПолноеИмя);
КонецЦикла;
Неверный подход удалять каждую строку во время процеса чтения файла...
Вы в цикле запоминайте скажем номера строк, которые прочли и ПОСЛЕ выполнения цикла удаляйте все прочтенные строки.
Это будет корректно.
В противном случае зачем вы используете цикл
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
если хотите постоянно менять файл из которого берете строки?
(4)цикл из за того что может быть 5-6 файлов в каждом разное количество строк, цикл обходит все файлы находит нужную строку и заполняет реквизиты, и нужно удалить не весь файл а именно строку данными которой были заполнены реквизиты
А не проще все в ТЗ выгрузить и с ТЗ работать. После обработки всех позиций, удалить строки, ТЗ обратно выгрузить в текст, текст записать в файл. Как то так...