Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
8 / 8 / 2
Регистрация: 03.02.2012
Сообщений: 308

Как удалить строку из файла?

02.07.2024, 13:50. Показов 1799. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Подскажите как на VBS удалить последнюю строку из текстового файла? Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.07.2024, 13:50
Ответы с готовыми решениями:

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

Как удалить определеную строку из 1 текстового файла и добавить эту строку во 2 текстовый файл
Есть два файла txt, 1-й need-repair.txt и 2-й repaired.txt Из 1 файла необходимо, найти предмет который будет удален и ввести название...

Как удалить строку из файла
Написал функцию,но она удаляет последнюю строку, но только в консоли. Файл не трогает. Нужно, чтобы при вводе Номера клиента, удалялась...

25
Испарился
 Аватар для HackerVlad
1738 / 634 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
02.07.2024, 17:37
Лучший ответ Сообщение было отмечено HackerVlad как решение

Решение

Visual Basic
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
Set FSO = CreateObject("Scripting.FileSystemObject")
    Set f = FSO.OpenTextFile("test.txt", 1)
    Dim strs()
    
    i = 0
    
    Do While Not f.AtEndOfStream
        str = f.ReadLine
        
        ' Что-нибудь делаем с прочитанной строкой
        ReDim Preserve strs(i)
        strs(i) = str
        
        i = i + 1
    Loop
    
    f.Close
    
    i = 0
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set f = FSO.CreateTextFile("test.txt", True)
    
    For i = 0 To Ubound(strs) - 1
        If i <> 0 Then
            f.WriteLine(strs(i))
        Else
            f.WriteLine(strs(i))
        End If
    Next
    
    f.Close
    
    msgbox "Готово!"
2
8 / 8 / 2
Регистрация: 03.02.2012
Сообщений: 308
02.07.2024, 17:39  [ТС]
Спасибо! То что надо.
1
Испарился
 Аватар для HackerVlad
1738 / 634 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
02.07.2024, 17:40
Цитата Сообщение от Oleg_cyber Посмотреть сообщение
Спасибо! То что надо.
Да пожалуйста, этот код легко же найти в гугле как прочитать и как записать текстовый файл.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37987 / 21019 / 4301
Регистрация: 12.02.2012
Сообщений: 34,585
Записей в блоге: 14
03.07.2024, 10:18
HackerVlad, высшим пилотажем было бы отрезать последнюю строку файла, подкорректировать поле "длина" в элементе оглавления.
0
Испарился
 Аватар для HackerVlad
1738 / 634 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
04.07.2024, 01:17
Catstail, что вы имеете ввиду? изменить количество байт файла что ли))) напрямую отредактировать в файловой системе количество байтов что ли)))) я не понял какой там высший пилотаж вы имеете ввиду, но в любом случае нужно знать позицию последнего вхождения vbCrLf
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37987 / 21019 / 4301
Регистрация: 12.02.2012
Сообщений: 34,585
Записей в блоге: 14
04.07.2024, 05:37
HackerVlad, да, именно! Изменить поле "длина файла" в элементе оглавления. Уменьшить на длину последней строки. А чтобы определить позицию последнего vbCrLf, читать файл построчно не требуется:

- открываем файл в двоичном режиме;
- считываем последние 2К байтов
- обратным поиском ищем пару 13,10

Цитата Сообщение от HackerVlad Посмотреть сообщение
я не понял какой там высший пилотаж вы имеете ввиду
- попробуйте в VB изменить элемент оглавления...

В POSIX-стандарте есть полезная функция truncate, которая устанавливает длину файла. Есть ли она в win32? Сейчас поищу у Эппламана.
С налёта - не нашел.

Есть способ проще! Утилита fsutil ! Проверил, работает отлично!

Code
1
fsutil file seteof <имя_файла> <новая_длина_в_байтах>
Решение с этой функцией гораздо рациональнее! Не нужен массив в оперативной памяти, не нужно читать файл построчно.
0
 Аватар для Mikle Quits
737 / 256 / 14
Регистрация: 21.01.2023
Сообщений: 355
04.07.2024, 08:28
Чтобы указать новый конец файла, нужно выполнить API SetFileValidData(), а потом SetEndOfFile().
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37987 / 21019 / 4301
Регистрация: 12.02.2012
Сообщений: 34,585
Записей в блоге: 14
04.07.2024, 13:01
Цитата Сообщение от Mikle Quits Посмотреть сообщение
SetEndOfFile()
- видел эту функцию у Эпплмана, но почему-то не понял. Да, для VB - это лучшее решение. А для VBS - лучше вызвать утилиту ком. строки.
0
Испарился
 Аватар для HackerVlad
1738 / 634 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
04.07.2024, 16:25
Цитата Сообщение от Catstail Посмотреть сообщение
- считываем последние 2К байтов
- обратным поиском ищем пару 13,10
строка может быть и больше 2 КБ и такие файлы я видел ни раз, так что это не вариант, строки могут быть вообще очень длинные

Добавлено через 6 минут
Цитата Сообщение от Catstail Посмотреть сообщение
Сейчас поищу у Эппламана
У Дана Эплмана вообще мало что есть хорошего и интересного по сравнению с наработками The Trck

Добавлено через 4 минуты
Цитата Сообщение от Catstail Посмотреть сообщение
А для VBS - лучше вызвать утилиту ком. строки.
Как буд-то человеку охото с собой ещё утилитку тягать можно подумать. Да и вызов EXE потом ожидание его завершение будет дольше по времени чем мой способ перезаписи файла. Хотя всё зависит от размеров конечно.

Добавлено через 8 минут
В любом случае тогда нужно придумывать код который начиная с самого конца файла будет прочёсывать каждый байт и искать 0D или 0A байт для определения перехода строки... И при этом не нужно загружать последних 2 КБ, достаточно побайтно перебирать тогда, смотришь сначала последний байт, потом предпоследний и так далее вплоть до начала файла...

Добавлено через 2 минуты
The Trick использовал функцию memchr например для самого быстрого поиска одного байта
1
 Аватар для volodin661
6570 / 2215 / 345
Регистрация: 10.12.2013
Сообщений: 7,624
04.07.2024, 16:54
Цитата Сообщение от HackerVlad Посмотреть сообщение
строки могут быть вообще очень длинные
некоторым нравятся, когда подлиннее
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37987 / 21019 / 4301
Регистрация: 12.02.2012
Сообщений: 34,585
Записей в блоге: 14
04.07.2024, 19:21
HackerVlad, не нашли в последних 2К, отступаем еще на 2. А можно просто и незатейливо читать строку за строкой до самого конца. Но без доп. массива.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Как будто человеку охота с собой ещё утилитку тягать можно подумать.
- она входит в поставку win. Зря спорите с очевидным.

Цитата Сообщение от HackerVlad Посмотреть сообщение
У Дана Эплмана вообще мало что есть хорошего и интересного по сравнению с наработками The Trck
- The Trick - безусловно, волшебник. Но стоит он на плечах Эпплмана.
0
Испарился
 Аватар для HackerVlad
1738 / 634 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
04.07.2024, 23:44
Цитата Сообщение от Catstail Посмотреть сообщение
не нашли в последних 2К, отступаем еще на 2
это же технология буферной подкачки получается

Добавлено через 45 секунд
The Trick по моему делает через MapViewOfFile такие вещи чтобы не загружать весь файл сразу о оперативную память

Добавлено через 1 минуту
Всем спасибо за беседу и интересные идеи, но по понятным причинам такой код никто писать не будет)))))))
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37987 / 21019 / 4301
Регистрация: 12.02.2012
Сообщений: 34,585
Записей в блоге: 14
05.07.2024, 06:09
Цитата Сообщение от HackerVlad Посмотреть сообщение
но по понятным причинам такой код никто писать не будет
- почему же? Будет время - напишу!

Добавлено через 2 минуты
Цитата Сообщение от HackerVlad Посмотреть сообщение
это же технология буферной подкачки получается
- и что? Все равно это лучше, чем занимать двойную память.

Цитата Сообщение от HackerVlad Посмотреть сообщение
The Trick по моему делает через MapViewOfFile
- в среде VBS это будет затруднительно...

Добавлено через 22 минуты
Это оказалось даже проще, чем я думал:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile("12345678.txt")
 
Set TextStream = File.OpenAsTextStream(1)
 
pos=0
 
While Not TextStream.AtEndOfStream
    Stri = TextStream.ReadLine()
    pos  = pos+len(Stri)+2
Wend
 
TextStream.Close
 
plast = pos-len(Stri)-2
 
Set WshShell = CreateObject("WScript.Shell")
 
cmd="fsutil file seteof "+"12345678.txt "+Cstr(plast)
 
WshShell.Run cmd
 
msgBox "OK"
Вот, к примеру, исходный файл 12345678.txt :

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

1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000
2432902008176640000
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000
2432902008176640000
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000 - !!!
2432902008176640000


Запускаем код... Получаем результат

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

1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000
2432902008176640000
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000
2432902008176640000
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000 - !!!

2
Испарился
 Аватар для HackerVlad
1738 / 634 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
05.07.2024, 16:08
Цитата Сообщение от Catstail Посмотреть сообщение
- и что? Все равно это лучше, чем занимать двойную память.
Как Вы сами видите всё обошлось без ручного поиска перехода строки))))

Добавлено через 3 минуты
У меня Ваш код не сработал, я создал файл всего с тремя строками, самый простой, с текстом
Code
1
2
3
1
2
3
Добавлено через 1 минуту
У меня Ваш код вообще не работает. На ёлочке тоже проверил.

Добавлено через 5 минут
Я бы не рекомендовал этот код учитывая что он не будет работать на всех компьютерах короче.
0
Испарился
 Аватар для HackerVlad
1738 / 634 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
05.07.2024, 16:11
Сами смотрите (у меня семёрка), а в XP так и подавно не будет такой команды в этой утилитке.
Миниатюры
Как удалить строку из файла?  
0
Испарился
 Аватар для HackerVlad
1738 / 634 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
05.07.2024, 16:12
Параметра seteof не существует.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37987 / 21019 / 4301
Регистрация: 12.02.2012
Сообщений: 34,585
Записей в блоге: 14
06.07.2024, 18:21
Цитата Сообщение от HackerVlad Посмотреть сообщение
Как Вы сами видите всё обошлось без ручного поиска перехода строки))))
- мне просто лень было разбираться с двоичными потоками. Не исключено, что используя двоичные стримы можно было бы решить задачу изящнее (даже без внешних утилит).

Что же до версии ОС, то это - слабое обвинение. Если кто-либо использует неподдерживаемую версию ОС, то он тем самым берет на себя обязанности подобного рода...

Если же смотреть на код с чисто алгоритмической т.з. то видно, что он весьма рационален по использованию оперативной памяти. Чего не скажешь про Вашу реализацию:

1. Она откровенно небрежна. Зачем дважды создавать объект FSO?
2. Она заливает в память весь массив. Причем делает это по-школярски - ресайзируя приемный массив на каждом (!) витке
цикла чтения. Если уж выбрали такой алгоритм, то ресайзируйте хотя бы после прочтения 10 строки. Попробуйте свой код на текстовом файле мегабайтов на 300...
0
Испарился
 Аватар для HackerVlad
1738 / 634 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
06.07.2024, 21:03
Критиковать все мы умеем конечно, я по быстрому написал просто и не заморачивался сильно вообще. А вы даже не сказали что ваш код не будет работать в семёрке, больше чем у половины моих знакомых стоит именно семёрка.

Добавлено через 47 секунд
А у некоторых кстати ещё и XP стоит до сих пор, это тоже нужно учитывать обязательно.

Добавлено через 20 секунд
Код который будет работать только в десятке это фу ерунда а не код.

Добавлено через 1 минуту
Цитата Сообщение от Catstail Посмотреть сообщение
Попробуйте свой код на текстовом файле мегабайтов на 300
Наверняка у человека маленький файл, для этой задачи.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37987 / 21019 / 4301
Регистрация: 12.02.2012
Сообщений: 34,585
Записей в блоге: 14
06.07.2024, 21:23
HackerVlad, тот, кто называет себя хакером, должен даже "быстро" писать без плюх.

Цитата Сообщение от HackerVlad Посмотреть сообщение
А вы даже не сказали что ваш код не будет работать в семёрке, больше чем у половины моих знакомых стоит именно семёрка.
- а в win-98 это вообще не запустить... Вы и Ваши знакомые могут работать в чём угодно. Это их проблемы. Точнее - это взгляд с весьма специфической стороны.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Код который будет работать только в десятке это фу ерунда а не код.
- не только в десятке, но и в win-11 (и, в соответствии с традициями Microsoft) и в последующих версиях.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Наверняка у человека маленький файл, для этой задачи.
- правильная программа (тем более - написанная хакером) должна быть спроектирована с максимальных охватом. Кстати, а чем это Ваше необоснованное предположение лучше моего (подавляющее число пользователей работают в актуальных версиях win)?

Обратите внимание на свою манеру критики. Когда Вам выгодно, вы пишите "строки могут быть вообще очень длинные". А когда нет - то "Наверняка у человека маленький файл, для этой задачи". Это называется "двойные стандарты".


По-моему, всё совершенно ясно. Из дискуссии выхожу за явной бессмысленностью. Но, возможно, выложу еще одно-два решения.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.07.2024, 21:23
Помогаю со студенческими работами здесь

Как удалить строку из файла?
Создайте скрипт, который читал бы содержимое текстового файла list.txt и выводил бы ее содержимое в HTML форме с списком флажков перед...

Как удалить последнюю строку из файла?
Дан файл нужно удалить из него последнюю строку и записать полученный результат в другой файл. Как удалить строку и вообще как посчитать...

Как правильно удалить строку из файла?
void deletez(char db) {data *p; int nomer; readdb(db); ofstream f; f.open(db); cout&lt;&lt;&quot;kakoy nomer udalit?&quot;&lt;&lt;endl; ...

Как удалить строку из текстового файла?
Как удалить строку из текстового файла ? к примеру sFile = &quot;C:\Temp\system.txt&quot; в файле system.txt первая строка вторя...

Как удалить строку из csv файла?
Не могу понять как сделать удаление строки из csv файла.Чтобы я мог выбрать какую строчку удалять.Помогите пожалуйста.Написал вот такой вот...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »