удалить прочитанную строку из текстового файла

1. waitklassik 04.03.19 10:45 Сейчас в теме
Добрый день есть код который отрабатывает как надо но нужно что бы после прочтения и заполнения реквизитов в 1с он удалил прочитанную строчку как это лучше сделать? вот сам код:
МассивФаилов = НайтиФайлы("C:\", "*.txt");
Текст = Новый ТекстовыйДокумент;
    Для Каждого Фаил из МассивФаилов Цикл
        Текст.Прочитать(Фаил.ПолноеИмя);
		Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
            Стр = Текст.ПолучитьСтроку(НомерСтроки);
			МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
			если объект.реквизит1 = МассивРеквизитов[0] тогда
			объект.реквизит2 = МассивРеквизитов[1];
			Объект.реквизит3 = МассивРеквизитов[2];   
			Объект.реквизит4 = МассивРеквизитов[3];
			Сообщить(Стр);
			конецесли;
	КонецЦикла;
Показать
По теме из базы знаний
Найденные решения
27. spacecraft 04.03.19 12:49 Сейчас в теме
(26) будет записано в тот же файл, из которого было чтение.
Вот полный код:
МассивФаилов = НайтиФайлы("C:\", "*.txt");
Текст = Новый ТекстовыйДокумент;
    Для Каждого Фаил из МассивФаилов Цикл
        Текст.Прочитать(Фаил.ПолноеИмя);
УдаляемыеСтроки = Новый Массив;
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл 
Стр = Текст.ПолучитьСтроку(НомерСтроки); 
МассивРеквизитов = СтрРазделить(Стр,"-",Ложь); 
если объект.реквизит1 = МассивРеквизитов[0] тогда
    УдаляемыеСтроки.Добавить(НомерСтроки);
объект.реквизит2 = МассивРеквизитов[1]; 
Объект.реквизит3 = МассивРеквизитов[2]; 
Объект.реквизит4 = МассивРеквизитов[3]; 
Сообщить(Стр); 
конецесли; 
КонецЦикла;
Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
    Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
КонецЦикла;
Текст.Записать(Фаил.ПолноеИмя);
КонецЦикла;
Показать
user591389_aska_rabota; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 04.03.19 10:51 Сейчас в теме
(1) перезаписью самого файла с нужным текстом, который должен остаться.
Только зачем каждую строку? Там очень много строк? Ну хотя бы порциями, а не каждую строчку. Иначе большая часть времени будет уходить на перезапись.
Для надежности можно каждую порцию оборачивать в транзакцию.
5. waitklassik 04.03.19 10:56 Сейчас в теме
(2)в файле может быть 5-10 строк нужно удалить именно ту строку которая подошла по условиям и данными которой заполнились реквизиты в 1с
7. spacecraft 04.03.19 10:59 Сейчас в теме
(5) удаляете по окончанию цикла и перезаписываете файл новыми данными.
8. waitklassik 04.03.19 11:04 Сейчас в теме
(7)при попытке удалить строку по завершению цикла пишет недопустимое значение параметра 1
Текст.УдалитьСтроку(стр);
14. spacecraft 04.03.19 11:21 Сейчас в теме
(8)
УдаляемыеСтроки = Новый Массив;
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл 
Стр = Текст.ПолучитьСтроку(НомерСтроки); 
МассивРеквизитов = СтрРазделить(Стр,"-",Ложь); 
если объект.реквизит1 = МассивРеквизитов[0] тогда
	УдаляемыеСтроки.Добавить(НомерСтроки);
объект.реквизит2 = МассивРеквизитов[1]; 
Объект.реквизит3 = МассивРеквизитов[2]; 
Объект.реквизит4 = МассивРеквизитов[3]; 
Сообщить(Стр); 
конецесли; 
КонецЦикла;
Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
	Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
КонецЦикла;
Показать
15. waitklassik 04.03.19 11:29 Сейчас в теме
(14)Переменная не определена (УдаляемыеСтроки)
<<?>>УдаляемыеСтроки.Добавить(НомерСтроки);
16. spacecraft 04.03.19 11:32 Сейчас в теме
(15) еще раз посмотрите. Я добавил в самом верху пропущенное объявление переменной.
17. waitklassik 04.03.19 12:20 Сейчас в теме
(16)не работает та же самая ошибка
18. waitklassik 04.03.19 12:22 Сейчас в теме
(16)ошибка ушла сейчас проверю
19. waitklassik 04.03.19 12:27 Сейчас в теме
(16)ошибка ушла. но строка не удаляется
20. spacecraft 04.03.19 12:31 Сейчас в теме
(19) не удаляется из файла? Конечно. Нужно еще записать полученный Текст.
21. waitklassik 04.03.19 12:37 Сейчас в теме
(20)текстом полученным из строки заполняются реквизиты в 1с
23. spacecraft 04.03.19 12:40 Сейчас в теме
(21) И? После кода в (14) необходимо записать Текст.
Текст.Записать(Фаил.ПолноеИмя);
24. waitklassik 04.03.19 12:45 Сейчас в теме
(23)


Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
Текст.УдалитьСтроку(УдаляемыеСтроки[-к];
Текст.Записать(Фаил.ПолноеИмя);

так?
25. spacecraft 04.03.19 12:46 Сейчас в теме
(24) после кода. Вот так:
УдаляемыеСтроки = Новый Массив;
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл 
Стр = Текст.ПолучитьСтроку(НомерСтроки); 
МассивРеквизитов = СтрРазделить(Стр,"-",Ложь); 
если объект.реквизит1 = МассивРеквизитов[0] тогда
    УдаляемыеСтроки.Добавить(НомерСтроки);
объект.реквизит2 = МассивРеквизитов[1]; 
Объект.реквизит3 = МассивРеквизитов[2]; 
Объект.реквизит4 = МассивРеквизитов[3]; 
Сообщить(Стр); 
конецесли; 
КонецЦикла;
Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
    Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
КонецЦикла;
Текст.Записать(Фаил.ПолноеИмя);
Показать
26. waitklassik 04.03.19 12:46 Сейчас в теме
(23)а если имена файлов разные?
27. spacecraft 04.03.19 12:49 Сейчас в теме
(26) будет записано в тот же файл, из которого было чтение.
Вот полный код:
МассивФаилов = НайтиФайлы("C:\", "*.txt");
Текст = Новый ТекстовыйДокумент;
    Для Каждого Фаил из МассивФаилов Цикл
        Текст.Прочитать(Фаил.ПолноеИмя);
УдаляемыеСтроки = Новый Массив;
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл 
Стр = Текст.ПолучитьСтроку(НомерСтроки); 
МассивРеквизитов = СтрРазделить(Стр,"-",Ложь); 
если объект.реквизит1 = МассивРеквизитов[0] тогда
    УдаляемыеСтроки.Добавить(НомерСтроки);
объект.реквизит2 = МассивРеквизитов[1]; 
Объект.реквизит3 = МассивРеквизитов[2]; 
Объект.реквизит4 = МассивРеквизитов[3]; 
Сообщить(Стр); 
конецесли; 
КонецЦикла;
Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
    Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
КонецЦикла;
Текст.Записать(Фаил.ПолноеИмя);
КонецЦикла;
Показать
user591389_aska_rabota; +1 Ответить
28. waitklassik 04.03.19 13:01 Сейчас в теме
Индекс находится за границами массива
если объект.реквизит1 = МассивРеквизитов[0]

если в файле больше 2 строк вида:
11111-11111-11111-11111-11111
22222-22222-22222-22222-22222
30. spacecraft 04.03.19 13:12 Сейчас в теме
(28) это уже другая ошибка. В отладке указать "Остановка по ошибке" и посмотреть что содержится в МассивРеквизитов.
31. user856012 14 04.03.19 13:45 Сейчас в теме
(28)
Индекс находится за границами массива
если объект.реквизит1 = МассивРеквизитов[0]

если в файле больше 2 строк вида:
11111-11111-11111-11111-11111
22222-22222-22222-22222-22222
Ну вот, опять те же грабли. Посмотрим, найдутся ли теперь желающие по ним потоптаться?
22. waitklassik 04.03.19 12:38 Сейчас в теме
(20)куда записать можете объяснить нормально первый раз с этим сталкиваюсь
3. Denis_CFO 49 04.03.19 10:53 Сейчас в теме
(1)
ТекстовыйДокумент.УдалитьСтроку (TextDocument.DeleteLine)
ТекстовыйДокумент (TextDocument)
УдалитьСтроку (DeleteLine)
Синтаксис:

УдалитьСтроку(<НомерСтроки>)
Параметры:

<НомерСтроки> (обязательный)

Тип: Число.
Номер удаляемой строки.
Описание:

Удаляет из текстового документа строку с указанным номером.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:

ТекстДок.УдалитьСтроку(23);

Показать
из Справки
4. YannikAlx 27 04.03.19 10:56 Сейчас в теме
Неверный подход удалять каждую строку во время процеса чтения файла...
Вы в цикле запоминайте скажем номера строк, которые прочли и ПОСЛЕ выполнения цикла удаляйте все прочтенные строки.
Это будет корректно.
В противном случае зачем вы используете цикл
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл

если хотите постоянно менять файл из которого берете строки?
alex-l19041; +1 Ответить
6. waitklassik 04.03.19 10:58 Сейчас в теме
(4)цикл из за того что может быть 5-6 файлов в каждом разное количество строк, цикл обходит все файлы находит нужную строку и заполняет реквизиты, и нужно удалить не весь файл а именно строку данными которой были заполнены реквизиты
9. YannikAlx 27 04.03.19 11:08 Сейчас в теме
Вот я и говорю, запоминайте строку , которую нужно удалить и ПОСЛЕ завершения цикла удаляйте ....
Но никак не в Цикле...
12. waitklassik 04.03.19 11:14 Сейчас в теме
(9)выношу за цикл Текст.УдалитьСтроку(стр); получаю ошибку Несоответствие типов (параметр номер '1')
13. YannikAlx 27 04.03.19 11:18 Сейчас в теме
(12) А вы почитайте, что за параметр должен быть в УдалитьСтроку( в синтаксис помощнике....
10. YannikAlx 27 04.03.19 11:09 Сейчас в теме
вы и сами запутаетесь, и программа будет криво работать...
11. YannikAlx 27 04.03.19 11:10 Сейчас в теме
Если строка для удаления одна и после нахождения ее больше искать нечего , то имеет смысл

УдалитьСтроку и сразу Прервать цикл...
29. Petrosyanc 7 04.03.19 13:12 Сейчас в теме
А не проще все в ТЗ выгрузить и с ТЗ работать. После обработки всех позиций, удалить строки, ТЗ обратно выгрузить в текст, текст записать в файл. Как то так...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот