У меня много строк текста. Я могу поместить их в текстовый файл или в электронную таблицу Excel. Им нужно много изменений. Вот пример до и после:

Input:  I'm buying one!  Only $39 .....
Output: I'm buying one - Only USD 39

Другими словами, HTML-код был преобразован в апостроф, восклицательный знак стал дефисом, дублированные пробелы были удалены, $ стал USD , а конечные dots и spaces были удалены, пока не осталось ни одного.

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

В идеале, у меня был бы легко редактируемый список, как в электронной таблице Excel, с одной ячейкой для "до" и смежной ячейкой для "после". Или, по крайней мере, в идеале это было бы для простой операции замены.

Я видел кучу макросов и сценариев в разных постах, но большинство из них не совсем нацелены, а некоторые я не понимаю. Какие-либо предложения?

3 ответа3

1

Я часто использую Microsoft Word для подобных вещей. Его поиск и замена очень эффективны, и мне легче, чем Excel, обрабатывать замены. Я также использую приложение для замены Блокнота под названием NoteTab (http://www.notetab.com/). Есть бесплатная "облегченная" версия. Приятной особенностью Notetab является то, что он легко позволяет выполнять поиск по нескольким файлам.

1

Это работает, если весь ваш текст похож на образец, который вы предоставили. Просто откройте текстовый файл в Excel и добавьте новый лист, чтобы создать таблицу условий замены (с заголовками). Он настроен на чтение первого столбца как терминов "до" и второго столбца как терминов "после". После этого нажмите Alt+F11, чтобы открыть панель редактора VBA. Вставьте новый модуль и вставьте следующий код.

Option Explicit
Sub cleanupText()

Dim allTxt() As Variant, sublist() As Variant
Dim i As Long, j As Long, k As Long, tdots As Integer

'Store data from sheets in arrays.
allTxt = Sheets(1).UsedRange.Value
sublist = Sheets(2).UsedRange.Offset(1, 0).Resize(Sheets(2).UsedRange.Rows.Count - 1, Sheets(2).UsedRange.Columns.Count).Value

For i = 1 To UBound(allTxt, 1)
    For j = 1 To UBound(allTxt, 2)
        'Loop through replacement terms and make replacements to data in array.
        For k = 1 To UBound(sublist, 1)
            allTxt(i, j) = Replace(allTxt(i, j), sublist(k, 1), sublist(k, 2))
        Next k
        allTxt(i, j) = Trim(allTxt(i, j))
        'Remove series of trailing periods.
        If Right(allTxt(i, j), 1) = "." Then
            tdots = 1
        Else
            tdots = 0
        End If
        Do While tdots = 1
            allTxt(i, j) = Left(allTxt(i, j), Len(allTxt(i, j)) - 1)
            If Right(allTxt(i, j), 1) = "." Then
                tdots = 1
            Else
                tdots = 0
            End If
        Loop
        allTxt(i, j) = Trim(allTxt(i, j))
    Next j
Next i
'Print cleaned up results in array onto sheet.
ActiveSheet.UsedRange.Value = allTxt
End Sub

Выполните код, затем сохраните файл в виде текста.

0

http://www.sobolsoft.com/excelremove/

Это хороший аддон (для Excel), который будет делать именно то, что вы хотите. Это стоит 30 долларов США (на момент написания статьи), поэтому замечательно, если вы часто используете его время от времени или постоянно, но если это всего лишь разовый вариант использования, то, возможно, оно того не стоит.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .