| 
    
        
     
     | 
    
  | 
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 
 | 
         
        ну и до кучи
 
        http://kb.mista.ru/article.php?id=484  | 
|||
| 
    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) в любом случае, более правильно как Ёпрст говорит, но и это не выход. а правильно - это - правила (сори за тф), которые нужно опубликовать/ограничить. При любой реализации загрузки из текста в виде "Петров Петр Петрович" - у тебя есть шанс нарваться на "пЁтр", и любые другие нюансы.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |