Анализ текстовых файлов

я столкнулся с ситуацией сегодня вечером, когда я хотел разобрать текстовый файл. Я был очень, очень длинный список слов, который содержал английские слова, разделенные линиями. Я хотел избавиться от каждого слова (или строки), которое было длиннее 7 символов. Это было бы просто в Linux, но я не могу найти простое решение в Windows XP. Я попытался использовать поиск регулярных выражений Notepad++, но это был огромный провал. Я попытался использовать выражение .{6,} без поиска совпадений. Я действительно в растерянности потому что я думал, что такого рода вещи будут чрезвычайно простыми и будут тонны инструментов для выполнения такой задачи. Похоже, Notepad++ поддерживает все другие функции в мире, кроме самых простых, которые кажутся наиболее очевидными.

еще одна моя цель состояла в том, чтобы поместить некоторый код до и после слова в каждой строке.

aardvark
apple
azolio

станет

INSERT INTO Words (word) VALUES ('aardvark');
INSERT INTO Words (word) VALUES ('apple');
INSERT INTO Words (word) VALUES ('azolio');

какие предложения / инструменты / советы вы должны выполнить задачи, подобные этой в Windows XP?

30
задан Joe Phillips
26.11.2022 20:02 Количество просмотров материала 3247
Распечатать страницу

13 ответов

чтобы добавить текст SQL, вы можете попробовать эту командную строку одной строкой:

(for /f %i in (words.txt) do @echo INSERT INTO Words ^(word^) VALUES ^('%i'^)) > words.sql

чтобы отфильтровать строки в текстовом файле более 7 символов, вы можете использовать другой инструмент командной строки, команда findstr:

findstr /v /r ^.........*$ words.txt > shorter-words.txt

параметр /r указывает, что вы хотите использовать соответствие регулярному выражению, а параметр /v указывает на печать строк, которые не совпадают. (Поскольку кажется, что findstr не позволяет указать диапазон количества символов, я подделал его в "8 или более" и "не соответствие".)

9
отвечен bobbymcr 2022-11-28 03:50

Perl конечно, просто вставьте этот скрипт и запустите его в том же каталоге, что и список слов. Измените имя списка слов на слова.txt или измените имя в скрипте. Вы можете перенаправить вывод в новый файл следующим образом:

words.pl > list.txt

без дальнейшей пользы (взбитые вместе быстро, можно рубить справедливый бит):

open FILE, "words.txt" or die $!;

my @words = <FILE>;

foreach $word(@words)
{
    print $word if(length($word) <= 8);
}
6
отвечен John T 2022-11-28 06:07

вы можете узнать GNUWin32 sed для Windows XP.

Аналогично AWK и Perl тоже.

То есть если вы привыкли к Unix скриптингу (если да, то тоже рассмотрите Cygwin).

иначе есть дополнительно PowerShell.

4
отвечен nik 2022-11-28 08:24

gVim является достойным инструментом редактирования, который имеет свои истоки в почтенный vi используется в системах Unix. Вы хотите использовать заменить команда для глобального поиска / замены каждого слова.

AWK и Perl очень мощные инструменты, но overkill для того, что вам нужно. Вы будете наслаждаться gVim, так как это редактор в первую очередь. Дело в том, что камни с gVim - это то, что вы всего лишь одним нажатием клавиши команда search/substitute / replace, которая может быть задана в формате надежного регулярного выражения.

Удача.

4
отвечен Rolnik 2022-11-28 10:41

массово недооценивается как инструмент разработки Microsoft Excel (или электронные таблицы OpenOffice). Существует максимальное количество строк, но вы можете воспользоваться одним из этих инструментов.

после этого вы можете как раз использовать левое, среднее, если, etc. функции в электронной таблице в формулах, которые идут справа от линии. Они будут автоматически скопированы с относительными ссылками.

много раз это намного проще, чем кодирование, если ты не кодер :) оттуда вы можете импортировать, экспортировать и делать много интересных вещей даже с текстом.

3
отвечен Dan Rosenstark 2022-11-28 12:58

может быть, это лучше подходит для StackOverflow, потому что лучший совет, который я могу дать вам, - изучить один из языков сценариев, чтобы облегчить такие задачи. Гораздо лучше знать один мощный инструмент, чем десятки маленьких, ИМХО,и это инвестиции, которые окупаются.

загрузка Python и прохождение урока займет несколько часов, но впоследствии такие задачи покажутся вам очень легкими. А еще лучше, вы научитесь распознавать задачи "ищу некоторые программы " в других областях, а также, и это увеличит вашу производительность в десять раз.

2
отвечен Eli Bendersky 2022-11-28 15:15

Я хотел бы использовать TextPad для этого.

Я широко использовал его для регулярных выражений в прошлом.

Я бы попытался найти что-то вроде:

  ^[[:alpha:]]{7,}\n

и ничего не заменяя.

2
отвечен Umber Ferrule 2022-11-28 17:32

ваше выражение неверно. Вы хотите этого:

^.{0,6}$

1
отвечен Joel Coehoorn 2022-11-28 19:49

Я знаю, что этот ответ запоздал, но я думаю, что тем не менее стоит добавить. Для чего это стоит, вы также можете разобрать этот текстовый файл с помощью Notepad++ и регулярные выражения довольно просто.

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

.{6,}

это выражение выглядит нормально и должно совпадать со всеми строками, содержащими 6 или более символов.

какой размер текстового файла? Notepad++ может занять некоторое время для выполнения регулярные выражения на очень больших файлах, поэтому возможно, что обработка не была завершена.

Примечание: вы утверждаете, что ваша цель состояла в том, чтобы удалить строки длиной более 7 символов-для этого вы должны использовать выражение .{8,}

если вы уверены, что это выражение не работает, вы уверены, что ваш режим поиска был установлен в регулярное выражение и что ". матчи новой строки " не был установлен?

, чтобы решить вашу проблему я бы выполните следующие действия в notepad++:

удалить все строки длиннее 7 символов Выполните поиск и замену в Notepad++ со следующим выражением:

Find what:      .{8,}\r?\n?
Replace with:

это удалит любую строку длиной более 7 символов, а также символы перевода строки и возврата каретки, если они есть.

заменить слова кодом

предполагая, что в каждой строке просто есть слово (и никаких начальных / конечных пробелов или нежелательных символов и т. д.) это может также будет сделано с помощью простого поиска и замены:

Find What: (.*)                                         //Match the whole line, store in capture group
Replace with: INSERT INTO Words (word) VALUES ('');   //reference value of capure group with 
1
отвечен Joshua Cole 2022-11-28 22:06

Я второй, используя Excel для этого.

Поместите все свои слова в столбец A.

поместите эту формулу в столбец B:

=Если(ДЛСТР(А1)>7,"",сцепить("вставить в слова (слово) значения ('", "А1","')"))

копировать формулу во все строки.

каждая строка в столбце B будет иметь свою команду SQL insert, когда длина слова меньше 7. В противном случае он будет пустым.

Если вы хотите удалить пустые строки, скопируйте и вставьте столбец значений B в другой столбец, а затем просто отсортируйте столбец. Пустые строки будут сдвинуты на дно.

0
отвечен 2022-11-29 00:23

Это можно сделать с помощью Perl однострочника (избавляясь от каждого слова длиннее 7 символов):

perl -nle "print if length($_) <= 7" "D:\temp2\input.txt" > ShortWords.txt

поместите это в файл BAT или выполните непосредственно из команды окно строки (Run / cmd).

Perl требуется для установки. Я использую ActivePerl - это очень проста в установке, как это имеет нормальный установщик Windows. прямая загрузка URL.

для второй части вашего вопроса (создание команд SQL): это просто расширение первого Perl One-liner:

perl -nle "print 'INSERT INTO Words (word) VALUES (\'' . $_ . '\');' if length($_) <= 7" "D:\temp2\input.txt" > SQLcommands.txt

Если это становится более сложным, то, вероятно, лучше с обычный Perl-скрипт, как предложил Джон Т.

0
отвечен Peter Mortensen 2022-11-29 02:40

Хотите верьте, хотите нет, но Microsoft Word на самом деле имеет регулярные выражения тоже. На CTR+ч > больше > Дикие карты. Выражение поиска, вероятно, будет чем-то вроде [.]{8+} - нажмите F1, пока отображается диалоговое окно поиск / замена, чтобы увидеть описание регулярных выражений Word.

0
отвечен ccpizza 2022-11-29 04:57

вы можете решить эту проблему без каких-либо дополнительных инструментов для загрузки, используя небольшой vbScript или макрос Excel VBA. Это действительно, больше вопрос для stackoverflow.com. Код для этого сценария будет выполняться в Excel VBA также почти без изменений.

образец VBA (не тестировался) может быть:

Sub filterRows()  
     Dim InputData  
     Open "c:\test.txt" For Input As #1    ' Open file for input.  
     Open "c:\out.txt" For Output As #2  
     Do While Not EOF(1)             ' Check for end of file.  
        Line Input #1, InputData    ' Read line of data.  
        If Len(InputData) <= 7 Then  
            Print #2, InputData  
        End If  
     Loop  
     Close #1    ' Close file.  
     Close #2  

End Sub 
0
отвечен Patrick Honorez 2022-11-29 07:14

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх