Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/124: Рейтинг темы: голосов - 124, средняя оценка - 4.56
 Аватар для K0te1ka
2 / 1 / 0
Регистрация: 11.04.2014
Сообщений: 8

Удалить определённые строки в файле

23.04.2014, 14:39. Показов 25982. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Имеются файлы XML вида:

<?xml version="1.0" encoding="windows-1251"?>
<BODY>
бла-бла-бла
</BODY>

o000000бла-бла-бла
бла-бла-бла

Нужно удалить все символы и строки после o000000 (вместе с ней) т.е. необходимо, чтобы осталось:

<?xml version="1.0" encoding="windows-1251"?>
<BODY>
...
</BODY>

Пробовал сделать -replace "o000000.+$", но удаляются все символы после o000000, а другая строка не трогается... Наверно, нужно грамотно составить регулярное выражение...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2014, 14:39
Ответы с готовыми решениями:

Как удалить определенные строки в файле
Имеется XMLTV файл, &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;tv generator-info-name=&quot;&quot;&gt; &lt;channel id=&quot;1&quot;&gt; &lt;display-name...

Удалить в файле строки, содержащие определенные слова
Добрый день! Помогите, нужно из огромного тхт файлика удалить все строки содержащие определенные слова. Например вася,петя,маша,даша,паша...

Удалить определенные строки
Всем доброго времени суток. У меня в файл сохраняются данные о кнопках Button: 2 // ScrollBox1 //&quot;родитель&quot; -...

8
 Аватар для borne
88 / 88 / 37
Регистрация: 28.11.2012
Сообщений: 309
23.04.2014, 15:48
костыль с коленки,но может допилите до нужного состояния:
PowerShell
1
2
3
4
$a = Get-Content '.\1.xml'
$linestart = ($a|Select-String "o000000*").LineNumber
$a|?{$_.ReadCount -ge $line}|%{$a=$a -split $_}
$a|Out-File 2.xml
2
 Аватар для K0te1ka
2 / 1 / 0
Регистрация: 11.04.2014
Сообщений: 8
24.04.2014, 08:02  [ТС]
Сделал сам. Как оказалось, очень просто =)
PowerShell
1
2
3
4
$LineStart = (((Get-Content 'C:\1.XML'|Select-String "o000000*").LineNumber) - 1)
$MassFile = Get-Content 'C:\1.XML'
$MassFile = $MassFile[0..($LineStart - 1)]
$MassFile | Out-File 'C:\1.xml' -Force
1
 Аватар для borne
88 / 88 / 37
Регистрация: 28.11.2012
Сообщений: 309
24.04.2014, 08:16
вот что мне нравится в PoSh что одну задачу можно решить разными способами...
0
31.10.2014, 08:14

Не по теме:

Цитата Сообщение от borne Посмотреть сообщение
вот что мне нравится в PoSh что одну задачу можно решить разными способами...
это, конечно, да..

ЗАДАЧА: прочитать входной файл от 1-ой строчки до строчки '</BODY>' и переложить в другой файл

как сформулировано, ровно так и кодируется - в одну строчку и теми же английскими словами:

Bash
1
perl -e  " do { print if 1 .. m(</BODY>) } while <> "  1.xml > 2.xml


зачем я сую всякие перловые примеры? - Хочу обратить внимание общественности,
что под Уиндус есть старый добрый инструмент, который решает задачи обработки текста и файлов
максимально быстро, лаконично, выразительно и изящно.

кроме того:

мультиплатформенный
мультипарадигменный
бесплатный

c громадной документированной библиотекой модулей

Реестр?
чтение:
Perl
1
2
$tip18 = $Registry->{"HKEY_LOCAL_MACHINE/Software/Microsoft/"
                  . "Windows/CurrentVersion/Explorer/Tips//18" };
запись:
Perl
1
2
$Registry->{"LMachine/Software/Microsoft/Windows/CurrentVersion/Explorer/Tips//186"}
         = "Be very careful when making changes to the Registry!";

OLE Automation?

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
            || Win32::OLE->new('Excel.Application', 'Quit');
 
my $Book = $Excel->Workbooks->Open($excelfile);   
 
my $Sheet = $Book->Worksheets("Sheet1");
 
with ($Sheet->PageSetup, 
    FitToPagesWide     =>$vtpages, 
    FitToPagesTall     =>$vtpages,
    Zoom               =>$vtfalse,     
    PrintGridlines     =>0,
    LeftHeader         => "Using Perl and Excel",
    FirstPageNumber    => xlAutomatic,
    PrintTitleRows     => "1:1");
ActiveDirectory ?
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Программа, добавляющая объект Contact
# Запускать можно под Linux,AIX,Solaris,HP-UX,FreeBSD,OpenVMS,Mac OS X, Windows etc
 
use Net::LDAP;
 
my $dc = 'dc1';
my $user = 'administrator@mycorp.com';
my $passwd = 'Adminpasswd';
my $parent_dn = "cn=users,dc=mycorp, dc=com";
 
my $ldap = Net::LDAP->new($dc) or die "$@\n";
my $rc = $ldap->bind($user, password => $passwd);
die $rc->error if $rc->code;
 
$rc = $ldap->add("cn=mycontact, $parent_dn",
    attrs        => [
    objectclass        => 'contact',
    displayName        => 'John Doe',
    sn                 => 'Doe',
    givenName          => 'John',
    telephoneNumber    => '555-123-4567',
                    ]);
 
if ($rc->code) {
  print "Add failed: ", $rc->error, "\n";
}
else {
  print "Add successful\n";
}
$ldap->unbind;

Запись в Excel-файл?
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#создает файл без установленного  Excel и на любой платформе
# Linux,AIX,Solaris,HP-UX,FreeBSD,OpenVMS, Mac OS X,Windows etc
# работает на порядок быстрее, чем через OLE Automation
 
#!/usr/bin/perl -w
 
    use strict;
    use Spreadsheet::WriteExcelXML;
 
    # Create a new workbook called simple.xls and add a worksheet
    my $workbook  = Spreadsheet::WriteExcelXML->new("simple.xls");
    my $worksheet = $workbook->add_worksheet();
 
    # The general syntax is write($row, $column, $token). Note that row and
    # column are zero indexed
 
    # Write some text
    $worksheet->write(0, 0,  "Hi Excel!");
 
 
    # Write some numbers
    $worksheet->write(2, 0,  3);          # Writes 3
    $worksheet->write(3, 0,  3.00000);    # Writes 3
    $worksheet->write(4, 0,  3.00001);    # Writes 3.00001
    $worksheet->write(5, 0,  3.14159);    # TeX revision no.?
 
 
    # Write some formulas
    $worksheet->write(7, 0,  '=A3 + A6');
    $worksheet->write(8, 0,  '=IF(A5>3,"Yes", "No")');
 
    # Write a hyperlink
    $worksheet->write(10, 0, 'http://www.perl.com/');
 
    # Set the column width for columns 1, 2, 3 and 4
    $worksheet->set_column(0, 3, 15);

0
1 / 1 / 0
Регистрация: 21.11.2018
Сообщений: 82
21.11.2018, 13:32
Всем здравствуйте. Подскажите как сделать чтобы удалял все не после ключевого слова, а до него. Не могу сообразить что на что поменять.


PowerShell
1
2
3
4
$LineStart = (((Get-Content 'C:\1.XML'|Select-String "o000000*").LineNumber) - 1)
$MassFile = Get-Content 'C:\1.XML'
$MassFile = $MassFile[0..($LineStart - 1)]
$MassFile | Out-File 'C:\1.xml' -Force
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
21.11.2018, 14:05
Цитата Сообщение от westcoast89 Посмотреть сообщение
Подскажите как сделать чтобы удалял все не после ключевого слова, а до него. Не могу сообразить что на что поменять.
PowerShell
1
2
3
4
5
$file = 'C:\Temp\1.txt'
 
$MassFile = Get-Content $file
$LineStart = ($MassFile | Select-String "o000000*").LineNumber - 1
$MassFile[$LineStart..$MassFile.Count] | sc $file -Force
1
1 / 1 / 0
Регистрация: 21.11.2018
Сообщений: 82
21.11.2018, 17:08
Спасибо большое. Работает но как то не все удаляет перед ключевым словом. Какие то символы продолжают себе спокойно жить) Может надо что-то с кодировкой файла сделать?
И ещё вопрос а реально прикрутить работу не с одним файлом, а например в директории с несколькими.*.txt файлами.?
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
21.11.2018, 17:42
Цитата Сообщение от westcoast89 Посмотреть сообщение
Работает но как то не все удаляет перед ключевым словом. Какие то символы продолжают себе спокойно жить) Может надо что-то с кодировкой файла сделать?
Гадать контрпродуктивно. Покажите точный пример файла или точно опишите, что именно вам нужно.

У меня, работает так как вы просили:

1.txt
Кликните здесь для просмотра всего текста

Раз,
два,
три,
четыре,
пять,
Вышел зайчик погулять.



PowerShell
1
2
3
$text = gc 1.txt
$LineStart = ($text | sls "пят*").LineNumber - 1
$text[$LineStart..$text.Count]
Code
1
2
пять,
Вышел зайчик погулять.
Цитата Сообщение от westcoast89 Посмотреть сообщение
а реально прикрутить работу не с одним файлом, а например в директории с несколькими.*.txt файлами.?
Очень трудно, но если постараться:

PowerShell
1
2
3
4
5
6
7
foreach ($file in ls C:\Temp\*.txt)
{
    $text = gc $file.FullName
    $LineStart = ($text | sls "o000000*").LineNumber - 1
    
    $text[$LineStart..$text.Count] | sc $file.FullName -Force
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2018, 17:42
Помогаю со студенческими работами здесь

Оставить в файле строки, содержащие определенные слова
Здравствуйте! Нужна помощь. type file.txt | find /v /i &quot;ВОВА&quot; | find /v /i &quot;ДИМА&quot; &gt; file.temp echo.Y | move file.temp file.txt ...

Комментировать-раскомментировать определённые строки в ini-файле
Имеется ini файл, нужен бат, чтобы можно было в нём указывать номер строк для добавления &quot;#&quot; и удаления его из других...

Удалить из строки определенные символы
Привет всем. В текстовом файле есть такие строки: 1s21a161hh2#yfatelz.net;sborka Нужно удалить символы от # (включая ее) до ; (не...

Удалить определенные символы из строки
Собственно в теме и вопрос, убрать это &amp;nbsp Примеры строк такие Макдоналдс» подал в суд&amp;nbsp на Роспотребнадзор РТ или ...

Удалить определенные строки из списка
Добрый день! Стоят следующии задачи: 1. Имею файл расширения 1.txt с большим набором строк (пример Dgkd6s). Необходимо удалить все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru