Автор Тема: Удалить текст после последнего пробела  (Прочитано 368 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн Huge_it [?]

  • Новичок
  • *
  • Сообщений: 10
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Есть файл, в нем текст разделенный пробелами(пустой строкой).

Пример:
Бренд:   Nomura
Модель:   Baby Popper

Форма:   popper
Частота колебаний:   низкочастотный

Размеры и вес
Длина:   60 мм
Вес:   8 г

Дополнительная информация
Плавучесть:   плавающий
Особенность:   шумовая камера
Техника ловли:   Stop&Go, равномерная проводка, твичинг
Специализация:   щука, окунь
Расцветка:   естественная
Цвет:   желтый

Страна-производитель:   Япония



Нужно удалить только текст(все знаки) после слова "желтый".
То есть, после слова "желтый" всё должно удаляться, включая возврат каретки и перевод строки.
« Последнее редактирование: Март 13, 2019, 14:42:40 от Huge_it »

Русское сообщество AutoIt

Удалить текст после последнего пробела
« Отправлен: Март 13, 2019, 13:58:54 »

Оффлайн hedji [?]

  • Продвинутый
  • ***
  • Сообщений: 356
  • Репутация: 65
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
#include <file.au3>

$sFilePath = @ScriptDir & "\test1.txt"
$sLines = _FileCountLines($sFilePath)
For $i = 1 To $sLines
    $str = FileReadLine($sFilePath, $i)
    FileWriteLine(@ScriptDir & "\test2.txt", $str)
    If StringInStr($str, "желтый") Then
        ExitLoop
    EndIf
Next
FileDelete($sFilePath)
FileMove(@ScriptDir & "\test2.txt", $sFilePath)
 


Оффлайн Huge_it [?]

  • Новичок
  • *
  • Сообщений: 10

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
hedji, нужно удалять не именно после конкретного слова "желтый", а после любого последнего слова перед последней пустой строкой.
Там могут быть и цифры и скобки и слеши и запятые, в общем все символы, вводимые с клавиатуры.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4046
  • Репутация: 1074
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
StringRegExpReplace($Text, "\R{2,}.*$", "")


Русское сообщество AutoIt

Re: Удалить текст после последнего пробела
« Ответ #3 Отправлен: Март 13, 2019, 16:03:22 »

Оффлайн hedji [?]

  • Продвинутый
  • ***
  • Сообщений: 356
  • Репутация: 65
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
OffTopic
hedji, нужно удалять не именно после конкретного слова "желтый", а после любого последнего слова перед последней пустой строкой.

Нужно удалить только текст(все знаки) после слова "желтый".
То есть, после слова "желтый" всё должно удаляться, включая возврат каретки и перевод строки.

Как ТЗ написано, так оно и выполнено  ;D




Оффлайн Huge_it [?]

  • Новичок
  • *
  • Сообщений: 10

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
StringRegExpReplace($Text, "\R{2,}.*$", "")


Работает, но убирает только одну строчку, в данном примере "Страна-производитель:   Япония". А их может быть много.
Нужно же удалять всё после нахождения последнего видимого/клавиатурного символа перед последней пустой строкой, то есть в данном случае всё после слова "желтый". А может быть например звездчока или скобки вместо "желтый".
В крайнем случае можно задать некоторое избыточное количество удаляемых строк, скажем 55.

Вариант попроще: начиная с конца по очереди удалять все НЕпустые строки.

Пока что задача не решена.

« Последнее редактирование: Март 15, 2019, 04:50:16 от Huge_it »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4046
  • Репутация: 1074
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
$Text = ClipGet()
$Text = StringLeft($Text, StringInStr($Text, @CRLF & @CRLF, 0, -1) - 1)
ConsoleWrite($Text & @CRLF)


Оффлайн Huge_it [?]

  • Новичок
  • *
  • Сообщений: 10

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI, что-то не выходит, удаляет всё содержимое, правда я в этом дуб дубом.
Можете дать полностью готовый скрипт для файла C:\samplefile.txt , с таким содержимым?  :

Цитировать
Бренд:   Nomura
Модель:   Baby Popper

Форма:   popper
Частота колебаний:   низкочастотный

Размеры и вес
Длина:   60 мм
Вес:   8 г

Дополнительная информация
Плавучесть:   плавающий
Особенность:   шумовая камера
Техника ловли:   Stop&Go, равномерная проводка, твичинг
Специализация:   щука, окунь
Расцветка:   естественная
Цвет:   желтый

Страна-производитель:   Япония
33333333333333333
5555555555555555
66666666666666666666666
463545643676766
6784897969
8888888888888
8888888888888888

Удалить нужно всё после "желтый", причем количество строк к удалению неизвестно.

Русское сообщество AutoIt

Re: Удалить текст после последнего пробела
« Ответ #7 Отправлен: Март 15, 2019, 15:00:18 »

Оффлайн hedji [?]

  • Продвинутый
  • ***
  • Сообщений: 356
  • Репутация: 65
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
А последняя строка всегда будет "Цвет:  ....."?
Просто между Модель и Форма тоже строки через одну идут.

Если цвет всегда последняя строка, то можно так:
Код: AutoIt [Выделить]
#include <file.au3>

$sFilePath = @ScriptDir & "\test1.txt"
$sLines = _FileCountLines($sFilePath)
For $i = 1 To $sLines
    $str = FileReadLine($sFilePath, $i)
    FileWriteLine(@ScriptDir & "\test2.txt", $str)
    If StringInStr($str, "Цвет:") Then
        ExitLoop
    EndIf
Next
FileDelete($sFilePath)
FileMove(@ScriptDir & "\test2.txt", $sFilePath)
 

« Последнее редактирование: Март 15, 2019, 15:12:09 от hedji »

Оффлайн Huge_it [?]

  • Новичок
  • *
  • Сообщений: 10

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
А последняя строка всегда будет "Цвет:  ....."?
Просто между Модель и Форма тоже строки через одну идут.

Нет, последняя строка может быть любой, поэтому нужно просто определить последнюю пустую строку и удалить всё после неё, желательно включая и саму пустую строку .
Я предложил вариант просто найти конец файла и поочередно удалять все НЕпустые строки вверх.

Помечен как лучший ответ пользователем Huge_it Отправлен Март 16, 2019, 15:44:33

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4046
  • Репутация: 1074
    • Награды
  • Версия AutoIt: 3.3.14.0
Huge_it  [?]
Цитировать
скрипт для файла C:\samplefile.txt
Код: AutoIt [Выделить]
$Text = FileRead("C:\samplefile.txt")
If @error Then Exit MsgBox(0, "Error", "Ошибка чтения файла")
$Text = StringLeft($Text, StringInStr($Text, @CRLF & @CRLF, 0, -1) - 1)
MsgBox(0, "Text", $Text)


Оффлайн Huge_it [?]

  • Новичок
  • *
  • Сообщений: 10

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Huge_it  [?]
Цитировать
скрипт для файла C:\samplefile.txt
Код: AutoIt [Выделить]
$Text = FileRead("C:\samplefile.txt")
If @error Then Exit MsgBox(0, "Error", "Ошибка чтения файла")
$Text = StringLeft($Text, StringInStr($Text, @CRLF & @CRLF, 0, -1) - 1)
MsgBox(0, "Text", $Text)


Не работает. Это полный скрипт? Может нужно fileopen и т.д. ?
« Последнее редактирование: Март 15, 2019, 15:39:24 от Huge_it »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4046
  • Репутация: 1074
    • Награды
  • Версия AutoIt: 3.3.14.0
Huge_it  [?]
Цитировать
Не работает
Что конкретно не работает? Как минимум одно сообщение должно быть.

Оффлайн Huge_it [?]

  • Новичок
  • *
  • Сообщений: 10

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Huge_it  [?]
Цитировать
Не работает
Что конкретно не работает? Как минимум одно сообщение должно быть.
Окно показывает, что после "желтый" ничего нет, но в файле остается весь текст.
Сойдет и  найти конец файла и поочередно удалять все НЕпустые строки вверх, может так проще.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4046
  • Репутация: 1074
    • Награды
  • Версия AutoIt: 3.3.14.0
Huge_it  [?]
Цитировать
в файле остается весь текст
Ну, естественно. Вы же просили: "Нужно удалить только текст". Про перезапись файла речи не было ;)
Пробуйте (для работы в корне диска С: могут потребоваться права администратора)
(нажмите для показа/скрытия)

Русское сообщество AutoIt

Re: Удалить текст после последнего пробела
« Ответ #14 Отправлен: Март 15, 2019, 16:22:33 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
7009 Просмотров
Последний ответ Апрель 06, 2010, 11:56:19
от CreatoR
5 Ответов
4271 Просмотров
Последний ответ Июль 23, 2013, 03:57:13
от AZJIO
2 Ответов
2255 Просмотров
Последний ответ Июль 23, 2013, 22:03:33
от Alecsis1
0 Ответов
1422 Просмотров
Последний ответ Апрель 25, 2014, 09:04:34
от madmasles
8 Ответов
1105 Просмотров
Последний ответ Ноябрь 22, 2017, 15:49:31
от Oleg-lamer
4 Ответов
744 Просмотров
Последний ответ Декабрь 14, 2017, 12:24:48
от serg41
2 Ответов
387 Просмотров
Последний ответ Март 15, 2018, 19:50:07
от slowhd
11 Ответов
741 Просмотров
Последний ответ Апрель 01, 2018, 14:58:56
от Tempo
1 Ответов
251 Просмотров
Последний ответ Июль 22, 2018, 13:45:45
от sngr
4 Ответов
562 Просмотров
Последний ответ Январь 09, 2019, 16:32:08
от Cytrus