Удаление дубликатов в строке через запятую в каждой ячейке столбца в MS Access - PullRequest
0 голосов
/ 06 апреля 2020

Я создаю базу данных Access, которая импортирует данные из файла Excel. К сожалению, одно импортируемое поле содержит несколько IP-адресов с дубликатами, разделенными запятой. Я хочу удалить дубликаты из этой строки, , чтобы потом их можно было разделить и вставить отдельно в столбец, оставив только отдельные IP-адреса. Моя таблица выглядит примерно так:

Host_name | IP Address 
----------------------
mba234    192.168.1.1, 192.168.1.1, 192.168.1.3
mba678    158.234.12.4, 123.123.123.23, 158.234.12.4, 123.123.123.23, 156.234.567.12
etc.

И, наконец, она должна выглядеть так:

Host name | IP Address 
----------------------
mba234    192.168.1.1, 192.168.1.3
mba678    158.234.12.4, 123.123.123.23, 156.234.567.12
etc.

Поскольку длина столбца меняется для каждого импорта, мне нужно решение для всего столбца: IP-адрес. До сих пор я нашел решения только для отдельной ячейки или предварительно определенного массива ячеек, но не для целого столбца со случайным количеством строк ...

Можете ли вы мне помочь?

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Или вы можете сделать это «сложным» способом.

  • Вам нужна внешняя программа с именем awk.exe,
  • Этот макрос преобразует входную строку.

    Function ReturnUnique(field As String) As String
      Dim Linetext As String
      Dim s As String
      Dim f As Integer
      Dim cmd As String
      cmd = "cmd /c echo " + field + " | awk -F ', ' '{ for (i=1;i<=NF;i++) { a[$i]=$i }; for (i in a) { print a[i] }}' >d:\temp\temp.txt"
      cmd = Replace(cmd, "'", """")
      Shell cmd, vbMinimizedFocus
      f = FreeFile()
      Open "d:\temp\temp.txt" For Input As #f
      Do While Not (EOF(f))
        Line Input #f, Linetext
        s = s + Linetext
      Loop
      ReturnUnique = s
    End Function
    Sub test()
      Dim t As String
      t = ReturnUnique("192.168.1.1, 192.168.1.1, 192.168.1.3")
      Debug.Print t
    End Sub
    

пример (вот почему test() есть!):

test
192.168.1.3 192.168.1.1

Теперь вы можете вызывать функцию tis для каждой записи в вашей таблице. ....

A Windows версию awk можно найти здесь: https://www.klabaster.com/progs/gawk4.zip

0 голосов
/ 06 апреля 2020

Я думаю, что разделение строк - ваш лучший вариант.

Вы можете найти пример здесь .

В вашем случае кажется, что ваш разделитель - это не просто запятая: "," Вместо этого, это ", ".

Это позволит вам легко превратить ваш пример в это и консолидировать больше по мере необходимости:

Host_name   IP_Address  Run_Count
------------------------------
mba234  192.168.1.1 1
mba234  192.168.1.1 2
mba234  192.168.1.3 1
mba678  158.234.12.4    1
mba678  123.123.123.23  1
mba678  158.234.12.4    2
mba678  123.123.123.23  2
mba678  156.234.567.12  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...