Что нового

Удаление слова из текстового файла

Dk

Новичок
Сообщения
358
Репутация
2
Искал похожую тему не нашёл. Есть удаление строк....

Вообщем есть файл текст.тхт

Мне нужно что бы при IputBox автоматически находил это слово и удалял его.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Даже и не подумал об етом ((

Тогда надо что бы толко один раз удалило, если я два раза Импут сделаю то 2 раза удалило. Если нет таого слова то тогда вообше ничего.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Вот скрипт:
Код:
$String = InputBox('Test', 'Введите слово для удаление:', '', '', 200, 100)
$Read = FileRead(@ScriptDir & '\1.txt')
$Split = StringSplit($Read, ' ')
For $i = 1 To $Split[0]
	If $Split[$i] = $String Then
		FileDelete(@ScriptDir & '\1.txt')
		$RegExpRep = StringRegExpReplace($Read, $String, '')
		FileWrite(@ScriptDir & '\1.txt', $RegExpRep)
	EndIf
Next


Он удаляет все найденные слова.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Ничего не происходит


Добавлено:
Сообщение автоматически объединено:

#include <array.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
$Fname = "Artikl.txt"
$Button1 = GUICtrlCreateButton("Plus", 48, 64, 89, 41)
$Button2 = GUICtrlCreateButton("Zählen", 8, 8, 73, 25)
$Button3 = GUICtrlCreateButton("Minus", 10, 200, 73, 25)
GUISetState(@SW_SHOW)


#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

Case $Button1
$a = InputBox("t", "")
$b = MsgBox(0, "", $a )
$Fname = FileOpen("artikl.txt",1)
FileWriteLine($Fname, $a)
Case $Button2
$d = FileRead($Fname)
$b = InputBox ("r","")
$c = StringRegExp($d, $b ,4)

_ArrayDisplay($c)
;MsgBox(0,"", $c)
case $Button3
$String = InputBox('Test', '??????? ????? ??? ????????:', '', '', 200, 100)
$Read = FileRead(@ScriptDir & '\artikl.txt')
$Split = StringSplit($Read, ' ')
For $i = 1 To $Split[0]
If $Split[$i] = $String Then
FileDelete(@ScriptDir & '\artikl.txt')
$RegExpRep = StringRegExpReplace($Read, $String, '')
FileWrite(@ScriptDir & '\artikl.txt', $RegExpRep)
EndIf
Next
EndSwitch
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,757
Репутация
1,151
Dk
Для замены текста используй StringReplace, так как в StringRegExpReplace некоторые символы читаются не как буквы, а как метасимвол выполняющий определённые действия.

Код:
$Gui = GUICreate("Form1", 315, 238, 192, 124)
$Button = GUICtrlCreateButton("Замена", 10, 10, 60, 25)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case -3
			Exit
		Case $Button
			$String = InputBox('Test', 'Удалить указанный текст', 'привет', '', 200, 130, Default, Default, Default, $Gui)
			$Read = FileRead(@ScriptDir & '\artikl.txt')
			$Read = StringReplace($Read, $String, '')
			$file = FileOpen(@ScriptDir&'\artikl.txt',2)
			FileWrite($file, $Read)
			FileClose($file)
	EndSwitch
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
AZJIO,
Лишний пробел останется, если это отдельное слово, удалит все слова, содержащие привет, например, от приветик останется ик.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Dk

{CodeWarn}
{LangWarn}
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
madmasles

Так ну я скажем так интегрировал. Всё работает, как сделать, что бы не оставляло пробела.

Файл выглядет так


123456789
122234567
123456789
123456789

Типо как база данных в строчку.
И надо что бы когда я удалял например 122234567, вес столбик поднимался.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Dk,
Попробуйте так. Скрипт загружает текст из файла Test.txt в ListView построчно. Если выделить строки, которые надо удалить и нажать кнопку Delete, то выделенные строки будут удалены из ListView. Нажав кнопку Save, Вы сохраните в файл Test.txt измененный текст.
Код:
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>

$sFile = @ScriptDir & '\Test.txt'
If Not FileExists($sFile) Then
	MsgBox(16, 'Error', 'No ' & $sFile)
	Exit
EndIf
$sText = FileRead($sFile)
$aText = StringSplit(StringStripCR($sText), @LF)

Dim $aTextItem[$aText[0]][1]
For $i = 1 To $aText[0]
	$aTextItem[$i - 1][0] = $aText[$i]
Next
$sText = ''
$aText = 0

GUICreate('Test', 300, 300)
$nButtonDel = GUICtrlCreateButton('Delete', 200, 20, 80, 30)
$nButtonSave = GUICtrlCreateButton('Save', 200, 70, 80, 30)
$nListView = GUICtrlCreateListView('', 2, 2, 180, 268, $LVS_REPORT, $LVS_EX_GRIDLINES)
$hListView = GUICtrlGetHandle($nListView)
_GUICtrlListView_AddColumn($hListView, 'Test', 150)
_GUICtrlListView_AddArray($hListView, $aTextItem)
$aTextItem = 0
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButtonDel
			GUICtrlSetState($nButtonDel, $GUI_DISABLE)
			GUICtrlSetState($nButtonSave, $GUI_DISABLE)
			$aDel = _GUICtrlListView_GetSelectedIndices($hListView, True)
			If $aDel[0] Then
				For $i = $aDel[0] To 1 Step -1
					_GUICtrlListView_DeleteItem($hListView, $aDel[$i])
				Next
			EndIf
			$aDel = 0
			_GUICtrlListView_SetItemSelected($hListView, -1, False)
			GUICtrlSetState($nButtonDel, $GUI_ENABLE)
			GUICtrlSetState($nButtonSave, $GUI_ENABLE)
		Case $nButtonSave
			GUICtrlSetState($nButtonDel, $GUI_DISABLE)
			GUICtrlSetState($nButtonSave, $GUI_DISABLE)
			$iCount = _GUICtrlListView_GetItemCount($hListView)
			For $i = 0 To $iCount - 1
				$sText &= _GUICtrlListView_GetItemText($hListView, $i) & @CRLF
			Next
			$hFile = FileOpen($sFile, 2)
			FileWrite($hFile, StringTrimRight($sText, 2))
			FileClose($hFile)
			$sText = ''
			$iCount = 0
			$hFile = 0
			GUICtrlSetState($nButtonDel, $GUI_ENABLE)
			GUICtrlSetState($nButtonSave, $GUI_ENABLE)
	EndSwitch
WEnd
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
madmasles


Спасибо болшое за скрипт коечто подчеркнул для себя.

Но мне щажно следующее.
Хочу написать программу для учёта товарав.
Работать Буду с BarCod Scanner

Смысл простой. Кажды товар имеет свой номмер. Например если товар пришёл то я нажимаю на кномпку Пришёл сканирую и программа сама записывает в текстовой файл. Ну а если нажат на кнопку "Ушёл" и отсканироват номмер товара, то что бы автоматически был удалён етот номмер из текстового файла (причём толко один раз и что бы столбик с осталными номмерами поднялся (что бы пробела не было))
Мне очень важно добится как можно максималного автоматизма учёта, что бы не нужно было нажимат кнопки, выбрать, искать, сохранить.
Текстовой файл будет выглядит вот так.


856756456456
765464564564
657656456546
765646456464


С самого начала я не написал конкретно что хочу сделать такую программу так как хотелось бы самому дойти)) Но время поджимает ((
 
Верх