1 / 1 / 0
Регистрация: 22.07.2014
Сообщений: 43
1

Подскажите, как разделить текст в ячейке на несколько столбцов (разные разделители)

11.06.2017, 18:56. Показов 5095. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Access.
Не могу решить проблему, есть текст в ячейке формата:
hster91@gmail.com;apokalipto1;dms78:NeP@82.34.98.147:4001;;;Marko Markovic;25;6;1992;Mozilla/5.0 (Windows NT 6.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0;;
Нужно разбить этот текст и внести в определенные столбцы (наверно через VBA). Проблема еще в том, что разделители разные, вначале это ( ; ), а в конце часть текста начиная со слов Mozilla/5.0 и заканчивая Firefox/45.0 - в одну ячейку.
Уже весь мозг себе сломал.
Что нужно, чтобы получилось (для наглядности создал файл в Excel), в приложении.
Заранее спасибо.
Миниатюры
Подскажите, как разделить текст в ячейке на несколько столбцов (разные разделители)  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2017, 18:56
Ответы с готовыми решениями:

Разделить текст в ячейке на несколько
Здравствуйте!. Помогите разбить содержимое ячейки на несколько, что было вот так:

Как разделить текст в ячейке по символам
Всем привет! Добавлено через 6 минут В общем есть такая задачка: Нужно вынуть из этой формулы...

Как разделить слипшийся текст в ячейке по Заглавным буквам и Числам
Как разделить слипшийся текст в ячейке по Заглавным буквам и Числам? При выгрузке из одной...

Как разделить данные из одного столбца в Excel на несколько отдельных столбцов?
Здравствуйте уважаемые участники форума! Обращаюсь к Вам с просьбой оказать мне помощь в...

21
1 / 1 / 0
Регистрация: 22.07.2014
Сообщений: 43
11.06.2017, 19:08  [ТС] 2
Таких строк более 100, и все они разной длины и разное количество символов (между разделителями)
0
Модератор
Эксперт MS Access
11957 / 4825 / 779
Регистрация: 07.08.2010
Сообщений: 14,132
Записей в блоге: 4
11.06.2017, 21:08 3
ексель я практически не вижу
aBCDEFGHIJK
hster91@gmail.comapokalipto1dms78:NeP@82.34.98.147:4001  Marko Markovic2561992Mozilla/5.0 (Windows NT 6.0;Win64;x64;rv:45.0) Gecko/20100101 Firefox/45.0;; 

но я предполагаю, что разделитель --это год 1992
в следующем поле может видимо быть не только Мозилла
0
1 / 1 / 0
Регистрация: 22.07.2014
Сообщений: 43
11.06.2017, 21:31  [ТС] 4
1. Да разделитель 1992; (с точкойзапятой). Но год у разных строк -разный.
2. А в следующем поле всегда слово Mozilla

Добавлено через 6 минут
ueva.82@mail.ruQ2PKdms78:NeP@82.34.98.147:4002  Elizabeth Robinson25121982Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
kovay@mail.rufhVx4dms78:NeP@82.34.98.147:4003  Ella Rodriguez2111983Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
pa.81@mail.ruOFqZz6Adms78:NeP@82.34.98.147:4004  Ashley Walker251999Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
arashvili.maryana@mail.ruqUgxO03dms78:NeP@82.34.98.147:4005  Abigail Perez2191987Mozilla/5.0 (Windows NT 6.2; WOW32; rv:48.0) Gecko/20100101 Firefox/48.0
lina.1979@mail.rumTkkdms78:NeP@82.34.98.147:4006  Hannah Mitchell2072002Mozilla/5.0 (Windows NT 6.0; WOW32; rv:47.0) Gecko/20100101 Firefox/47.0
0
199 / 24 / 12
Регистрация: 07.02.2014
Сообщений: 221
12.06.2017, 11:24 5
Не понимаю проблемы: до девятого разделителя ";" делишь на отдельные слова, а после девятого весь оставшийся кусок записываешь целиком без разделения. Или я что-то не так понял?
0
1 / 1 / 0
Регистрация: 22.07.2014
Сообщений: 43
12.06.2017, 11:31  [ТС] 6
>>Не понимаю проблемы: до девятого разделителя ";" делишь на отдельные слова, а после девятого весь оставшийся кусок записываешь целиком без разделения. Или я что-то не так понял?

А как с помощью VBA разделить на слова, сможете помочь, прислать код?
Я искал в инете и на форума (пробовал с помощью MId и Instr), но не получилось написать рабочий код.
0
Модератор
Эксперт MS Access
6004 / 2833 / 692
Регистрация: 12.06.2016
Сообщений: 7,594
12.06.2017, 11:47 7
yam_job,*

1. Выделить последний фрагмент записи.
2. Отсечь этот фрагмент и оставшуюся часть разбить с помощью *Split.
3. Сформировать новую запись в результирующей таблице.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim S1 () As String, _
    S2 As String, _
    S As String, _
    i As Byte
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("SELECT F FROM Tabl1")
Do Until Rst.EOF
   i = Instr(Rst!F, "Mozilla")
   S2 = Mid(Rst!F, i)
   S1 = Split(Left(Rst!F, i - 2), ";")
   For i = 0 To UBound(S1)
        S = S & """" & S1(i) & ""","
   Next
   S = S & """" & S2 & """"
   CurrentDb.Execute "INSERT INTO Tabl2 (....) VALUES (" & S & ")"
Loop
Rst.Close
Пишу наобум с планшета.
Могут быть погрешности.
Может, пока пишу, уже дали ответ....
1
Эксперт MS Access
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,863
12.06.2017, 11:48 8
Цитата Сообщение от yam_job Посмотреть сообщение
А как с помощью VBA разделить на слова
Смотрите функцию Split. Она поместит слова в массив строк, этот массив и обрабатывайте (пока начало слова не Mozilla/5.0, просто переносите в другой рабочий, а при появлении с началом Mozilla/5.0 весь "хвост" склеиваете).
0
199 / 24 / 12
Регистрация: 07.02.2014
Сообщений: 221
12.06.2017, 12:45 9
Вот оформил как отдельную программу с выводом на экран.
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
Sub pr()
Dim b() As String
s = "hster91@gmail.com;apokalipto1;dms78:NeP@82.34.98.147:4001;;;Marko Markovic;25;6;1992;Mozilla/5.0 (Windows NT 6.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0;;"
n = InStr(1, s, "Mozilla")
a = Mid(s, 1, n - 1)
b() = Split(a, ";")
ReDim Preserve b(10)
b(9) = Mid(s, n, Len(s) - n - 1)
For i = 0 To 9
MsgBox (b(i))
Next i
End Sub
0
1 / 1 / 0
Регистрация: 22.07.2014
Сообщений: 43
12.06.2017, 14:14  [ТС] 10
Capi*
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim S1() As String, _
    S2 As String, _
    S As String, _
    i As Byte
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("SELECT import_imp FROM import")
Do Until Rst.EOF
   i = InStr(Rst!import_imp, "Mozilla")
   S2 = Mid(Rst!import_imp, i)
   S1 = Split(Left(Rst!import_imp, i - 2), ";")
   For i = 0 To UBound(S1)
   S = S & """" & S1(i) & ""","
   Next
   S = S & """" & S2 & """"
CurrentDb.Execute "INSERT INTO Fb_actual (Fb_akk, FB_Pass, FB_Proxy, FB_mail, FB_mail_pass, FB_name, FB_DD, FB_MM, FB_YYYY, Fb_userag) VALUES (" & S & ")"
Loop
Rst.Close
End Sub
Вот мой код.
Первую запись он нормально добавляет, а когда начинает обрабатывать вторую строку, то пишет ошибку:
Число значений запроса и назначения полей не совпадают;

2. Дополнительный вопрос:
У меня в некоторых строчках есть значения после Mozilla/5.0 (Windows NT 6.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0, разделенные ";", думал сам смогу разобраться, как дальше отделить в отдельные столбцы последующие значения, но не могу понять, нужен совет.
Пример некоторых строчек:
-misn2001@yahoo.com;FdMGaeB;dms78:Ne@54.214.64.94:4002;;;Addison Thompson;13;12;1980;Mozilla/5.0 (Windows NT 6.0; WOW32; rv:46.0) Gecko/20100101 Firefox/46.0;1;21
-mark2694@yahoo.com;YwEdwO;dms78:Ne@35.182.226.36:4002;;;Ava Baker;6;7;1983;Mozilla/5.0 (Windows NT 10.0; WOW32; rv:48.0) Gecko/20100101 Firefox/48.0;12;7
0
Эксперт MS Access
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,863
12.06.2017, 14:50 11
Цитата Сообщение от yam_job Посмотреть сообщение
а когда начинает обрабатывать вторую строку, то пишет ошибку
А где ее обработка? Next что? Наверное нужно Next i, да и в цикле обработки записей набора данных Rst нет Rst.MoveNext (зациклится программа).
0
1 / 1 / 0
Регистрация: 22.07.2014
Сообщений: 43
12.06.2017, 15:13  [ТС] 12
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub Command0_Click()
Dim S1() As String, _
    S2 As String, _
    S As String, _
    i As Byte, _
    Ak As Integer 
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("SELECT * FROM import")
 If Rst.RecordCount <> 0 Then 
        Rst.MoveLast 
        Rst.MoveFirst 
For Ak = 0 To Rst.RecordCount - 1
   S = " "
   i = InStr(Rst!import_imp, "Mozilla")
   S2 = Mid(Rst!import_imp, i)
   S1 = Split(Left(Rst!import_imp, i - 2), ";")
   For i = 0 To UBound(S1)
   S = S & """" & S1(i) & ""","
   Next
   S = S & """" & S2 & """"
CurrentDb.Execute "INSERT INTO Fb_actual (Fb_akk, FB_Pass, FB_Proxy, FB_mail, FB_mail_pass, FB_name, FB_DD, FB_MM, FB_YYYY, Fb_userag) VALUES (" & S & ")"
Rst.MoveNext
Next
End If
Rst.Close
End Sub
Подправил код, теперь все работает.
2. Сможете помочь по второму вопросу:
У меня в некоторых строчках есть значения после Mozilla/5.0 (Windows NT 6.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0, разделенные ";", думал сам смогу разобраться, как дальше отделить в отдельные столбцы последующие значения, но не могу понять, нужен совет.
Пример некоторых строчек:
-misn2001@yahoo.com;FdMGaeB;dms78:Ne@54.214.64.94:4002;;;Addison Thompson;13;12;1980;Mozilla/5.0 (Windows NT 6.0; WOW32; rv:46.0) Gecko/20100101 Firefox/46.0;1;21
-mark2694@yahoo.com;YwEdwO;dms78:Ne@35.182.226.36:4002;;;Ava Baker;6;7;1983;Mozilla/5.0 (Windows NT 10.0; WOW32; rv:48.0) Gecko/20100101 Firefox/48.0;12;7
0
Модератор
Эксперт MS Access
6004 / 2833 / 692
Регистрация: 12.06.2016
Сообщений: 7,594
12.06.2017, 15:17 13
Цитата Сообщение от ltv_1953
Next что? Наверное нужно Next i
Это не обязательно. Не влияет.
Цитата Сообщение от ltv_1953
нет Rst.MoveNext
Да. Это мое упущение.
Говорю же, пишу с планшета через мобильный интернет....
Хотя это слабое оправдание, конечно.
Тут еще цитирование дико затруднено (не всплывают желтые надписи),
приходится практически вручную набирать.

Что касается вопроса ТС.
yam_job,
Нужно анализировать входные данные.
Формализовать их и привести к единому стандарту..
В первых примерах наблюдается десять полей, как и в принимающем файле,
а в двух новых примерах полей уже больше.

И про спасибо не забывайте.
0
Модератор
Эксперт MS Access
11957 / 4825 / 779
Регистрация: 07.08.2010
Сообщений: 14,132
Записей в блоге: 4
12.06.2017, 15:18 14
If Rst.RecordCount <> 0 Then 'Ïðîâåðÿåì Г§Г*ГЇГЁГ±ГЁ
Rst.MoveLast 'Г‡Г*ïîëГ*ГїГҐГ¬ Г§Г*ïðîñ
Rst.MoveFirst 'ÏåðâГ*Гї Г§Г*ГЇГЁГ±Гј
перед копированием кириллицы сначала включайте русскую раскладку клавиатуры
--затем выделение и копирование
--затем вставка на форум в теги
Visual Basic
1
VB
(4- справа в нижней строке редактора соообщения)
0
Модератор
Эксперт MS Access
6004 / 2833 / 692
Регистрация: 12.06.2016
Сообщений: 7,594
12.06.2017, 15:22 15
shanemac51,

Это кому и зачем????
0
1 / 1 / 0
Регистрация: 22.07.2014
Сообщений: 43
12.06.2017, 15:23  [ТС] 16
У меня некоторые строчки заканчиваются на 10 поле (типа):
hster91@gmail.com;apokalipto1;dms78:NeP@82.34.98.147:4001;;;Marko Markovic;25;6;1992;Mozilla/5.0 (Windows NT 6.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0
А есть некоторые строчки с 12 полями (типа):
misn2001@yahoo.com;FdMGaeB;dms78:Ne@54.214.64.94:4002;;;Addison Thompson;13;12;1980;Mozilla/5.0 (Windows NT 6.0; WOW32; rv:46.0) Gecko/20100101 Firefox/46.0;1;21

Думаю, может там где в строчке 10 полей, с помощью кода в последние ячейки будут вставляться пустые значения, а где 12 полей, то будут вставляться значения в поля, так можно сделать?

Добавлено через 25 секунд
Исправил
0
Модератор
Эксперт MS Access
6004 / 2833 / 692
Регистрация: 12.06.2016
Сообщений: 7,594
12.06.2017, 15:30 17
yam_job,

Вежливые люди обычно благодарят за помощь.
0
1 / 1 / 0
Регистрация: 22.07.2014
Сообщений: 43
12.06.2017, 15:41  [ТС] 18
Capi*
Спасибо, я там кнопочку нажал)

Добавлено через 10 минут
Если нужно привести к какому-то одному виду, то мне нужно разбить эту строчку с 12 полями: (т.е. как то ещё два поля в конце отделить)
misn2001@yahoo.com;FdMGaeB;dms78:Ne@54.214.64.94:4002;;;Addison Thompson;13;12;1980;Mozilla/5.0 (Windows NT 6.0; WOW32; rv:46.0) Gecko/20100101 Firefox/46.0;1;21
0
Модератор
Эксперт MS Access
6004 / 2833 / 692
Регистрация: 12.06.2016
Сообщений: 7,594
12.06.2017, 15:52 19
Примерно так:
Visual Basic
1
2
3
4
5
6
7
Dim  S4() As String
S4 = Split(Mid(InStr(Rst!import_imp, "Firefox"), Rst!import_imp, ";")
If UBound(S4) = 0 Then
    S = S & S2 & ""","""","""""
Else
    S = S & S2 & """,""" & S4(1) & """,""" & S4(2) & """"
End If
Это добавить в ранее данный Вам код.
Сами попробуйте.
Я уже замучалась набирать пальцами по памяти.
1
1 / 1 / 0
Регистрация: 22.07.2014
Сообщений: 43
12.06.2017, 18:01  [ТС] 20
Еще раз спасибо Capi, получился готовый код:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Private Sub Command0_Click()
Dim S1() As String, _
    S2 As String, _
    S As String, _
    i As Byte, _
    i1 As Byte, _
    Ak As Integer 
Dim S4() As String
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("SELECT * FROM import")
 If Rst.RecordCount <> 0 Then 
        Rst.MoveLast 
        Rst.MoveFirst 
For Ak = 0 To Rst.RecordCount - 1
   S = " "
   i = InStr(Rst!import_imp, "Mozilla")
   S2 = Mid(Rst!import_imp, i)
   S1 = Split(Left(Rst!import_imp, i - 2), ";")
   i1 = InStr(Rst!import_imp, "Firefox")
   S4 = Split(Mid(Rst!import_imp, i1), ";")
   For i = 0 To UBound(S1)
   S = S & """" & S1(i) & ""","
   Next
   If UBound(S4) = 0 Then
    S = S & """" & S2 & ""","""","""""
    CurrentDb.Execute "INSERT INTO Fb_actual (Fb_akk, FB_Pass, FB_Proxy, FB_mail, FB_mail_pass, FB_name, FB_DD, FB_MM, FB_YYYY, Fb_userag) VALUES (" & S & ")"
    Else
    S = S & """" & S2 & """,""" & S4(1) & """,""" & S4(2) & """"
    End If
    CurrentDb.Execute "INSERT INTO Fb_actual (Fb_akk, FB_Pass, FB_Proxy, FB_mail, FB_mail_pass, FB_name, FB_DD, FB_MM, FB_YYYY, Fb_userag, FB_friends, FB_friends_rq) VALUES (" & S & ")"
Rst.MoveNext
Next
End If
Rst.Close
End Sub
Осталось разобраться как удалить лишние знаки, чтобы после .0 ничего не было в строках (но это на работу не влияет)
Mozilla/5.0 (Windows NT 6.0; WOW32; rv:46.0) Gecko/20100101 Firefox/46.0;1;21
Mozilla/5.0 (Windows NT 10.0; WOW32; rv:48.0) Gecko/20100101 Firefox/48.0;;
0
12.06.2017, 18:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2017, 18:01
Помогаю со студенческими работами здесь

Подскажите, как разделить код на несколько файлов
• Имеем основной cpp файл с main. • Имеем код нужных функций • Есть указание реализовать эти...

Как разделить строку на разделители используя StringBuffer?
как разделить строку на разделители используя StringBuffer?

Необходимо разделить текст в ячейке на две. Граница vbCrLf
не пойму что-то как разделить текст в ячейке, которая содержит знак красной строки vbCrLf. Мне...

Разделить запрос на несколько столбцов
В результате запроса: SELECT n_fid, rash_poln FROM buf_v_int WHERE n_ob=104746 and...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru