PDA

Показать полную графическую версию : [решено] узнать слово имя которого известно на паловину


Страниц : [1] 2

Ирина1986
06-01-2015, 12:49
Здравствуйте . можно ли написать такой bat например в файле 1.txt есть много много слов и строк.. как мне найти слова имя которых известно на половину и результат записать в файл txt в столбик.
и второй вопрос есть файл 1.txt в нем много много много строк как оставить только 50 строк а остальные строки удалить и все записать в log.txt
Спасибо.

Georgio
06-01-2015, 18:24
можно ли написать такой bat например в файле 1.txt есть много много слов и строк.. как мне найти слова имя которых известно на половину и результат записать в файл txt в столбик. »




Ирина1986, определения понятия "слово" отличаются в лингвистике и информатике. Если для простоты принять за слово последовательный набор символов в тексте, разделённый символами пробела, табуляции и перехода на новую строку, то в рамках создания "чистого" пакетного файла не существует ничего лучше решений такого типа:


@<"1.txt">"1.log" (
for /f "delims=" %%i in ('more^| findstr /ir "\<первая_половина_слова"') do @(
for %%j in (%%i) do @(
for /f %%k in ('echo "%%j"^| findstr /ir "^\"первая_половина_слова.*\""') do @(
echo %%~k
)
)
)
)

;

@<"1.txt">"1.log" (
for /f "delims=" %%i in ('more^| findstr /ir "вторая_половина_слова\>"') do @(
for %%j in (%%i) do @(
for /f %%k in ('echo "%%j"^| findstr /ir "\".*вторая_половина_слова\"$"') do @(
echo %%~k
)
)
)
)

.



Этот метод имеет много недостатков:
1) в тексте не должно быть кавычек;
2) символы ,,
;,
= будут разделять "слово" на несколько "слов";
3) "слова", содержащие символы * и ?,
будут проигнорированы;
4) специальные символы в шаблоне поиска должны экранироваться символом \;
5) могут встретиться и другие нюансы.





и второй вопрос есть файл 1.txt в нем много много много строк как оставить только 50 строк а остальные строки удалить и все записать в log.txt »




@<"1.txt">"log.txt" (
for /l %%i in (1 1 50) do @(
set/p x=
if defined x (cmd/v/c echo.!x!) else (echo.)
set x=
)
)





Ирина1986, привет от ComSpec и Georgio! С Рождеством!

Ирина1986
08-01-2015, 10:54
Georgio, ой спасибо мальчики привет от ComSpec и Georgio! С Рождеством! » нифига себе ему тоже привет чет потерялся он

Ирина1986
09-01-2015, 20:47
Georgio, @<"1.txt">"1.log" ( for /f "delims=" %%i in ('more^| findstr /ir "вторая_половина_слова\>"') do @( for %%j in (%%i) do @( for /f %%k in ('echo "%%j"^| findstr /ir "\".*вторая_половина_слова\"$"') do @( echo %%~k ) ) ) ) »

ужас так долго ищет....а как дополнить этот код что бы только 50 слов искал и все.. и записывал их в лог

Foreigner
09-01-2015, 22:31
Ирина1986, Лучше воспользоваться специально написанными для работы с текстом утилитами. Например с помощью sed. Допустим надо найти все "сло..." и "...во" в 1.txt и все совпадения записать в 2.txt

@echo off
1>nul chcp 1251

sed -r "s/\s|\.|,/\n\r/g" 1.txt | sed -nr "/\bсло.+|.+во\b/p" > 2.txt


sed можно взять здесь (http://gnuwin32.sourceforge.net/packages/sed.htm)

Ирина1986
09-01-2015, 23:18
Foreigner, спасибо конечно но так не пойдет.

мне надо так как я постом выше написала

Foreigner
10-01-2015, 12:39
но так не пойдет »
Не подходит sed (он работает гораздо быстрее батника) или надо первые 50 вхождений? Вот первые 50:

@echo off
1>nul chcp 1251

sed -r "s/\s|\.|,/\n/g" 1.txt | sed -nr "/\bсло.+|.+во\b/p" | sed "50q" > 2.txt

Ирина1986
10-01-2015, 20:12
Foreigner, sed не подойдет а может и подойдет просто там столько много ссылок что я не смогла разобраться что скачивать если не трудно дайте прямую ссылку на этот sed

а можно с этим кодом
@<"1.txt">"1.log" (
for /f "delims=" %%i in ('more^| findstr /ir "вторая_половина_слова\>"') do @(
for %%j in (%%i) do @(
for /f %%k in ('echo "%%j"^| findstr /ir "\".*вторая_половина_слова\"$"') do @(
echo %%~k
)
)
)
)
чтобы находил 50 слов и все и записывал в лог
спасибо.

yurfed
10-01-2015, 20:34
узнать слово имя которого известно на паловину »на паловину будет сложней.

Iska
10-01-2015, 20:42
просто там столько много ссылок что я не смогла разобраться что скачивать »
sed for windows - Поиск в Google (https://www.google.ru/search?q=sed+for+windows) → sed for Windows (http://gnuwin32.sourceforge.net/packages/sed.htm) или GnuWin - Browse /sed/4.2.1 at SourceForge.net (http://sourceforge.net/projects/gnuwin32/files/sed/4.2.1?sort=filename&sortdir=asc) → и то, и другое приводят к sed-4.2.1-setup.exe (http://sourceforge.net/projects/gnuwin32/files/sed/4.2.1/sed-4.2.1-setup.exe/download).

Ирина1986
10-01-2015, 21:01
Iska, sed надо еще и устанавливать а нам на работе администратор не разрешает ничего устанавливать.

Iska
10-01-2015, 21:57
Ирина1986, тогда возьмите
sed for Windows (http://gnuwin32.sourceforge.net/packages/sed.htm)
GnuWin - Browse /sed/4.2.1 at SourceForge.net (http://sourceforge.net/projects/gnuwin32/files/sed/4.2.1?sort=filename&sortdir=asc)
архив: sed-4.2.1-bin.zip (http://sourceforge.net/projects/gnuwin32/files/sed/4.2.1/sed-4.2.1-bin.zip/download) и три необходимых библиотеки к исполняемому файлу «sed.exe»: dependencies zip file (http://gnuwin32.sourceforge.net/downlinks/sed-dep-zip.php).

администратор не разрешает ничего устанавливать. »
И это правильно.

Ирина1986
10-01-2015, 22:20
Iska,
три необходимых библиотеки к исполняемому файлу «sed.exe»: dependencies zip file. »
вот это я нашла три библиотеки
архив: sed-4.2.1-bin.zip »
а в архиве так много папок я не нашла sed.exe
я что такая глупая но я ведь не глупая я действительно искала

Iska
11-01-2015, 08:46
а в архиве так много папок я не нашла sed.exe »
«sed.exe» расположен в архиве «sed-4.2.1-bin.zip» внутри папки «bin».

Ирина1986
11-01-2015, 11:00
Iska, спасибо тебе за терпение разобралась но теперь возникают вопросы вот этот код
@echo off
1>nul chcp 1251

sed -r "s/\s|\.|,/\n\r/g" 1.txt | sed -nr "/\bсло.+|.+во\b/p" > 2.txt

все нормально ищет но если в слове идет точка он почему то не ищет

Iska
11-01-2015, 11:09
Ирина1986, это коллеги Foreigner и Georgio придут, посмотрят — я с sed не работаю. Но сразу поясните, что в Вашем понимании есть:
в слове идет точка »
Можно на примерах. Ибо, насколько я понимаю, например, «ма.ма» — это уже будет не слово, а два слова, разделённых точкой.

Foreigner
11-01-2015, 11:11
все нормально ищет но если в слове идет точка он почему то не ищет »
Всегда считал, что точки, запятые и пробелы не являются частью слова. Приведите пример условия для поиска.

Ирина1986
11-01-2015, 11:32
Foreigner,
вот все ищет переделайте этот вариант под мои нужды чтобы находил 50 слов и все ...и записывал в лог
@<"1.txt">"1.log" (
for /f "delims=" %%i in ('more^| findstr /ir "вторая_половина_слова\>"') do @(
for %%j in (%%i) do @(
for /f %%k in ('echo "%%j"^| findstr /ir "\".*вторая_половина_слова\"$"') do @(
echo %%~k
)
)
)
)

Ирина1986
11-01-2015, 15:14
никто не переделает такой сложный код?

Iska
11-01-2015, 16:18
Ирина1986, Вы не отвечаете на заданные вопросы. В итоге это выглядит так: «сделать, как я хочу, хотя я и сам не знаю, чего я хочу».




© OSzone.net 2001-2012