|
Разбить строку на несколько строк
|
|||
---|---|---|---|
#18+
Доброго времени суток всем! Кто сможет помочь? Есть у меня в таблице 1 поле MEMO. В нём через разделители Chr(13) & Chr(10) записаны следующие строки: ------------------------- Title: ### First Name: ####### Last Name: ####### Suffix: ####### Job Title: ## Company: ######### ####### Street: ######## City: ######### ------------------------- Заголовки строк повторяются - в каждой записи присутствуют идентичные Title, First Name и т.д.; строки разделены стандартной последовательностью Chr(13);Chr(10). Можно ли как-то "разбить" это одно поле MEMO на части - то есть в запросе получить таблицу, содержащую не одно поле MEMO, а 8 текстовых полей? Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2008, 18:21 |
|
Разбить строку на несколько строк
|
|||
---|---|---|---|
#18+
Можно функцию написать, в которую передавать значение мемо-поля и номер строки в ней, которую надо получить. В функции при помощи Split получать массив и возвращать нужный элемент. А в запросе написать 8 вызовов этой функции - по числу элементов в мемо-значении. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2008, 18:34 |
|
Разбить строку на несколько строк
|
|||
---|---|---|---|
#18+
Karfagen, спасибо! Я по этому пути идти и собирался. Но не совсем понимаю, как мне лучше разделять строки. Нашёл и попробовал что-то типа этого: '============================================================================='Функция возвращает массив элементов из строки, разделенных разделителем '============================================================================= Public Function Разбор_строки_в_массив(Строка As String, Разделитель As String) As Variant Dim МассивСлов() As Variant Dim i As Integer Dim k As Integer 'счетчик элементов массива Dim j As Integer 'начальная позиция слова в строке Dim КоличествоСлов As Integer Dim ПозицияНайденногоСлова As Integer Dim Str As String k = 1 j = 1 ПозицияНайденногоСлова = 0 'подсчет кол-ва слов в строке КоличествоСлов = Число_слов_в_строке(Строка, Разделитель) 'Если строка состоит из 1 слова If КоличествоСлов = 1 Then 'Выйти из функции с соответствующим значением Разбор_строки_в_массив = Строка Exit Function ElseIf КоличествоСлов = 0 Then Разбор_строки_в_массив = Null Exit Function End If 'создание соответствующей размерности в массивах ReDim МассивСлов(1 To КоличествоСлов) 'Цикл по символам в строке For i = 1 To Len(Строка) - Len(Разделитель) + 1 If Mid(Строка, i, Len(Разделитель)) = Разделитель Then 'Занести в массив слово МассивСлов(k) = Mid(Строка, j, i - j) k = k + 1 j = i + Len(Разделитель) End If Next i 'Занесение последнего слова МассивСлов(k) = Mid(Строка, j, i - j + Len(Разделитель) - 1) 'Возврат значения Разбор_строки_в_массив = МассивСлов End Function Массив не всегда одинаковый, вот в чем проблема. Встречаются строки, где юзеры втулили пару лишних "энтеров", и на этом я стопорюсь... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2008, 18:48 |
|
Разбить строку на несколько строк
|
|||
---|---|---|---|
#18+
Blue Screen of DeathНо не совсем понимаю, как мне лучше разделять строки. Нашёл и попробовал что-то типа этогоЕсли у вас Access старше msa97, то для этих дел есть функция Split. С ее помощью приведенный вами фрагмент записывается одной строкой. Однако, учитывая ваше позднее замечание насчет возможных лишних Chr(13)+Chr(10) в мемо-значении, возможно есть смысл использовать несколько иной подход - не разбивать строку в массив и получать элемент по запрошенному индексу (как я ранее предлагал), а искать в мемо-строке указанный префикс и возвращать подстроку от него до ближайшего перевода строки. Пример функции: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Пример запроса с ее использованием: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Пробуйте. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2008, 21:05 |
|
|
start [/forum/topic.php?fid=45&msg=35357643&tid=1643031]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 394ms |
0 / 0 |