Имя: Пароль:
1C
1C 7.7
v7: Удаление строки из текстового файла
,
0 Штурман
 
10.02.14
11:59
К примеру, есть текстовый файл со следующим содержимым:

Иванов Иван Иванович
Петров Петр Петрович
Сидоров Сидр Сидорович

Нужно в этом файле найти слово "Петр" и удалить строку с этим словом, т.е. "Петров Петр Петрович" стереть.

Как примерно это реализуется в семерке, кто подскажет?
1 Godofsin
 
10.02.14
12:03
ну я думаю так: загружается из файла, удаляется, загружается обратно в файл
2 Штурман
 
10.02.14
12:04
(1) куда загружается, в массив ?
3 Godofsin
 
10.02.14
12:04
(2) Как вариант
4 AlexYurg
 
10.02.14
12:05
Есть объект "Текст".
Дальше СП расскажет.
5 Злопчинский
 
10.02.14
12:07
накуа в массив грузить..?
прочитали строку из файла1, в строке поискали, нашли - пропустили и пошли на чтение след.строки; не нашли - вывели в файл2. По окончании файл1 удалили, файл2 переименовали на файл1 (главное чтобы с правами все ок было)...?
6 serg-lom89
 
10.02.14
12:08
УдалитьСтроку() вроде есть
7 DrZombi
 
гуру
10.02.14
12:12
(6) Ты хоть понимаешь, как работает Объект "Текст"?
И что он делает с файлом? :)
...
И что будет, если файл весит 600 метров, или 2 Гб, и более :)
8 DrZombi
 
гуру
10.02.14
12:14
(0) Зечем тебе удалить себя из лога?
В общем, лучше поведай нам, что за текстовый файл, каковы его назначение?
Как он заполняется, по какому правилу?
Каков максимальный размер файла? (если он весит до 1 метра, то используй Объект "Текст" и его методы) :)
9 DrZombi
 
гуру
10.02.14
12:15
+(0)Как вариант, можно не удалять, а попросту заполнить Эту фамилию пробелами :)
Заполняя соответственно все другие системные "Символы", что бы в итоге получилась Мего большая строка (пустая) :)
10 Штурман
 
10.02.14
12:30
(8) Какой лог, это всего лишь простой пример :)

А размер файла около 30 мегабайт.
11 Ёпрст
 
10.02.14
12:33
через fso чтение первого, запись во второй..
12 Ёпрст
 
10.02.14
12:33
усё.
13 Штурман
 
10.02.14
12:37
(11) а что такое fso ?
14 Wobland
 
10.02.14
12:38
(13) Fabryka Samochod?w Osobowych S.A. — польская компания, производящая легковые автомобили.
15 Ёпрст
 
10.02.14
12:40
16 Ёпрст
 
10.02.14
12:41
17 Штурман
 
10.02.14
12:47
(15) что-то там про удаление строки ни строчки, как и про нахождение слова
18 Ёпрст
 
10.02.14
12:49
(17) п...ц

Пока file.AtEndOfStream=0 Цикл
     стр=file.ReadLine();
     Если Найти (стр,"ПолныйПЭ") =0 Тогда
           file2.WriteLine(стр);
     КонецЕсли;
КонецЦикла;
19 eRik
 
10.02.14
12:51
а штатный v7plus с его V7TextFile уже не в моде?
20 trad
 
10.02.14
13:07
(18)при помощи BinaryData из 1с++ можно на одном файле выкрутится
21 Штурман
 
10.02.14
13:07
(18)    

fso = СоздатьОбъект("Scripting.FileSystemObject");
    file = fso.OpenTextFile(ИмяФайла, 1, 0, 0); //Открываем файл в режиме "только чтение"
        
    тз = СоздатьОбъект("ТаблицаЗначений");
    тз.НоваяКолонка("НомерСтроки");
    
    Пока file.AtEndOfStream=0 Цикл
        стр = file.ReadLine();
        Если Найти(стр, "Петр") = 0 Тогда
            тз.НоваяСтрока();
            тз.НомерСтроки = стр;
            Сообщить(стр);
            //file2.WriteLine(стр);
        КонецЕсли;
    КонецЦикла;
    
    file.Close();

сообщает две последние строки, что не так?
22 trad
 
10.02.14
13:09
(20) *выкрутиться
23 Штурман
 
10.02.14
13:09
(21) вообще все строки выводтся после находжения Петра...
24 Ёпрст
 
10.02.14
13:11
>>>тз.НомерСтроки = стр; //'nj gbpltw
25 Ёпрст
 
10.02.14
13:12
(21) Это означает, что во всех отстальных строках есть слово Пётр
26 Штурман
 
10.02.14
13:13
(25) в остальных строках нет никакого петра
27 Ёпрст
 
10.02.14
13:13
Если надо удалить Петр, а не Петрова, то так
Если Найти(стр, " Петр ") = 0 Тогда
28 Ёпрст
 
10.02.14
13:14
(26) :))))))))))))))))))))))))))))))))))))))))))))))
29 Штурман
 
10.02.14
13:16
(28) УдалитьСтроку() - так чтоль?

а номер ее откуда брать?
30 Ёпрст
 
10.02.14
13:17
(29) Наркоман шо ле ?
31 Штурман
 
10.02.14
13:17
(30) не семерошник :)
32 Ёпрст
 
10.02.14
13:18
Какой в ж..у номер строки ?

Читай (11)

Читаешь первый файл, если строка подходит по условию - пихаешь её во второй (новый файл). Усё.
33 Штурман
 
10.02.14
13:20
(32) не, мне новый файл не нужен, да и зачем найденную строку в другой файл пихать, есть мне ее удать из первого файла нужно
34 Ёпрст
 
10.02.14
13:22
(33) удачи. Я тебе предложил один из самых быстрых способов.
35 Ёпрст
 
10.02.14
13:23
скопировать новый файл со старым именем с перезаписью оного.. тоже доли секунды
36 Штурман
 
10.02.14
13:31
(35) Т.е. получается так:
создаем новый файл, в который записываем строки, старый файл удаляем, а новый переиновываем в название старого...
37 Ёпрст
 
10.02.14
13:36
(36) не надо ничего удалять, нужно просто новый файл записать со старым именем с флагом перезаписи.. и усё.
38 Штурман
 
10.02.14
14:15
(37) Спасибо, в конце сделал так:

fso.CopyFile(ИмяФайла2, ИмяФайла, 1);
fso.DeleteFile(ИмяФайла2, 1);
39 Ёпрст
 
10.02.14
14:23
мог бы и проще.. MoveFile
40 Штурман
 
10.02.14
14:24
(39) учту :)
41 Злопчинский
 
10.02.14
15:28
не прошло и получаса как пришли к решению, озвученному еще (5). моего слова мало было, надо чтобы Епрст пинок дал... ;-)
42 acanta
 
10.02.14
15:35
честные студенты сначала подумают сами, а потом сверят свои ответы..
43 Torquader
 
10.02.14
15:41
Кстати, а мы слово Петр ищем или сочетание букв ?
Например, Найти("Пертов","Петр") скажет, что нашла, а на самом деле его там нет.
44 an-korot
 
10.02.14
16:43
вот вы человеку мозг трахаете... 43  поста о такой фигне %(
45 Torquader
 
10.02.14
16:50
(44) У человека полоска опыта такая, что он всё и сам может, но, видимо, скучно одному код писать для всякой фигни.
46 Torquader
 
10.02.14
16:51
Я, например, хотел вчера спросить у форума, что лучше - передавать в функцию десять параметров или одну структуру.
Потом, решил сам проверить - оказалось, что ответ ожидаем.
47 Ёпрст
 
10.02.14
16:53
(46) "в мешок и об угол" ?
48 Torquader
 
10.02.14
16:59
(47) Просто, когда хочешь получить грамотный ответ, нужно полностью описать задачу и способы её решения, а, когда ты это сделал, то понимаешь, что задача уже решена и спрашивать о ней не за чем.
А, пока задача не решена - можно только "съезд телепатов" созывать, чтобы они постановку додумали.
49 an-korot
 
10.02.14
17:01
(48) :-D
съезд телепатов - сказал как бог ))))
50 DrZombi
 
гуру
11.02.14
10:40
(46) Структуру, вестимо.
Но оно удобно только если параметров больше 10-ти :)
51 DrZombi
 
гуру
11.02.14
10:41
(48) Вот оно как, вы за то, что бы мы тут телепатию развивали.
И пыталсь "Отгадать Мелодию по первым нотам"? :)
52 Torquader
 
11.02.14
17:21
(50) Оказалось, что передавать структуру быстрее, но если параметры используются хотя бы на 50%, то передача всех параметров работает быстрее, так как доступ к структуре - самая медленная операция, в отличие от передачи параметров, часть работы за них выполнена ещё на этапе компиляции.
(51) Я как раз сказал, что реальное решение можно получить тогда, когда этот процесс не запускается.
53 Он
 
11.02.14
21:12
(38) fso.CopyFile("1Cv7.tmp", "1Cv7.mlg", 1);
54 Torquader
 
11.02.14
21:36
(53) Эх, чему вы людей учите - не хорошо править историю, тем более так топорно.
55 Он
 
11.02.14
22:31
(54) Чел видимо накосячил. Теперь пытается избежать неотвратимого возмездия.
56 Злопчинский
 
11.02.14
22:32
При наличии бэкапов - ничто не является неотвратимым ;-)
57 Torquader
 
11.02.14
23:03
(56) И своевременного двойного логирования.
58 Он
 
11.02.14
23:17
Бэкапы - удел трусов.
59 1Сергей
 
12.02.14
08:51
(56) штатная выгрузка 1С логи не бекапит
60 an-korot
 
12.02.14
09:45
(59) а ктото еще пользуется штатной выгрузкой о.О
61 1Сергей
 
12.02.14
10:20
(60) есть такие :)
62 Torquader
 
12.02.14
16:06
(61) А как это "не бэкапит", если маску правильно вписать, то должна делать всё, что там указано.
Другое дело, что логи нужно копировать ещё до штатной выгрузки, так как в них кто-то может покопаться.
63 1Сергей
 
12.02.14
21:16
(62) Может, мы про разные вещи говорим? Я говорю, что В конфигураторе "Администрирование - Выгрузить данные..." не включает в zip-архив файл 1cv7.mlg
Что Вы имеете в виду под штатной выгрузкой, мне не ведомо.
64 Torquader
 
12.02.14
23:04
(63) Там чуть выше есть "Сохранить данные", где как раз журнал включить и можно.
Выгрузить - выгружает внутренности данных, а сохранить - просто сохраняет dbf-файлы.
65 Злопчинский
 
13.02.14
02:25
бэкапить надо обязательно! вот у мну разборки сейчас нехилые идут. я тупо случайно удалил тестовые базы. бухские. тупо случайно промазал по клаве. базы - вне моей сферы ответсвенности. бэкапов - не было - базы то тестовые - а в них оказывается велась регулярная РАБОТА. Итого - я виновен в катастрофе. не те кто не озаботился ни тем что никого не уведомил что в тестовых базах идет работа, не те виновны кто не бэкапил рабочие данные - виновен я, выступивший в роли стихийного бедствия.. сегодня отмазу писал страницы на 4 - разрисовывал ипоказывал кто истинный виновник.. ;-) жду продолжения марлезонсокого балета... ;-)
66 Злопчинский
 
13.02.14
02:27
Инересно - много среди 1Сников народа - кто НИ РАЗУ ПО КРУПНОМУ не лажанулся? ;-) или все стыдливо умаличвать будут...?
.
у мну были случаи когда я лажал по крупному в вещах, которыев моей сфере отвественности - но удавалось выкрутится малой кровью - либо бэкапы были, либо можно было "исправит" налажанное...
67 1dvd
 
13.02.14
07:52
(66) Меня бог миловал. Однако, был один конфуз. В одном филиале база начала конкретно глючить - журналы показывали радугу, отчеты не работали. Решение требовали срочно. Я позвонил одмину и сказал, чтобы он всех выгонял из центральной базы и пересоздавал заново перефирийку. И только потом до меня дошло, что нужна была тупая переиндексация.
В результате парализовал работу центральной базы (около 30 пользователей) почти на час. Но, никакие данные потеряны не были
68 Mikeware
 
13.02.14
07:58
(66) "не лажался тот, кто не лабал!"©
69 1dvd
 
13.02.14
08:25
(68) Думаю, на собеседовании можно задавать вопрос "Сколько баз Вы грохнули не сделав бэкапа".
Если скажет две и более - рассматривать кандидатуру с опаской.
Если скажет одну - однозначно брать.
Если скажет не одной - гнать поганой метлой и ссаными тряпками
70 Mikeware
 
13.02.14
08:43
(69) ХЕЗ. Бэкапы были всегда. Проблема в основном в том, чтобы восстановить данные, не прервывая работы в основной базе...
71 DrZombi
 
гуру
13.02.14
09:09
(66) Бекапы... всегда бекапы :)
72 Torquader
 
13.02.14
18:40
Я, помнится, все лишние документы на компе собрал в папку "мусор", чтобы пользователи "разгребли", а она "умная" тётка, как только папку "мусор" увидела - сразу её удалила.
После этого я очень не люблю тёток.
73 Злопчинский
 
13.02.14
22:10
(70) это да.. когда человек 30 - еще можно как-то операттивно скоординироваться, если больше - уже проблематично...
.
а как можно подсунуть исправленный MD в папку с базой (файловая. в мд схема-структура данных не правилась, только формы/алгоритмы)..?
74 ДенисЧ
 
13.02.14
22:19
(73) Тык анлокер же....
75 Zhuravlik
 
13.02.14
22:42
(73) "как можно подсунуть исправленный MD в папку с базой"
- Если turbomd используется, можно просто текстовички перекинуть...
76 Злопчинский
 
13.02.14
22:50
(75) а можешь в скайп стукнуться на Zlopun?
77 FlashC
 
13.02.14
22:56
(0) в любом случае, более правильно как Ёпрст говорит, но и это не выход. а правильно - это - правила (сори за тф), которые нужно опубликовать/ограничить. При любой реализации загрузки из текста в виде "Петров Петр Петрович" - у тебя есть шанс нарваться на "пЁтр", и любые другие нюансы.