Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разделить 2 части, InStrRev 
V
    Опции темы
company05
Дата 3.3.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Модератор
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 6.5.2010

Репутация: нет
Всего: нет



Доброе времени суток! У меня такая проблема, я хочу разделить полученный текст на 2 части, ключом является знак *. Первая часть идет, а вот вторая часть не получается вытащить. Это код для поиска Вот мой код для второй части:
Текст храниться в ListBox1
Код

 Dim count As Integer = (ListBox1.Items.Count - 1)
                    Dim words1 As String = ""
                    Dim words As String = ""
                    If txtFind.Text <> "" Then
                        For a = 0 To count
                            words = ListBox1.Items.Item(a)
                            words1 = Mid(words, 1, InStrRev(words, "*"))
                            If InStr(words1.ToLower, txtFind.Text.ToLower) Then
                                txtRichVivod.Font = (New Font("Times New Roman", 14))
                                txtRichVivod.ForeColor = Color.Black
                                txtRichVivod.Text = txtRichVivod.Text & Trim(Mid(words, 1, InStr(words, "*") - 1)) & vbLf
                                txtRichVivod.Text = txtRichVivod.Text & vbTab & Trim(Mid(words, InStr(words, "*") + 1)) & vbLf & vbLf & vbLf
                            End If
                        Next


Помогите разобраться?
PM MAIL   Вверх
diadiavova
Дата 3.3.2011, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Код

Dim source = "Text before star*Text after star"
Dim starIndex = source.IndexOf("*")
Dim txtBefore = source.Substring(0, starIndex) 
Dim txtAfter = source.Substring(StarIndex + 1)



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
company05
Дата 3.3.2011, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Модератор
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 6.5.2010

Репутация: нет
Всего: нет



C InStrRev не вариант будет?
PM MAIL   Вверх
diadiavova
Дата 3.3.2011, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(company05 @  3.3.2011,  20:38 Найти цитируемый пост)
C InStrRev не вариант будет? 

Видишь ли, все эти функции, достались из VB6 и в принципе поддерживаются, в первую очередь, ради совместимости с ним. Можно использовать и их, они ничем не хуже родных дотнетовских, но лучше все-таки использовать методы класса String. Я в принципе эти старые функции не особенно хорошо и знаю, поэтому, если тебе непременно надо использовать их, то это не ко мне вопрос.
А чем мой вариант не подходит? smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
company05
Дата 3.3.2011, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Модератор
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 6.5.2010

Репутация: нет
Всего: нет



Здесь у меня они как массив идут. Я здесь я попробовал что то не получилось у меня
PM MAIL   Вверх
diadiavova
Дата 3.3.2011, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(company05 @  3.3.2011,  21:49 Найти цитируемый пост)
Здесь у меня они как массив идут

И? С каждым элементом так надо работать.

Цитата(company05 @  3.3.2011,  21:49 Найти цитируемый пост)
 Я здесь я попробовал что то не получилось у меня 

Что именно не получилось? smile 

Короче сделай два метода расширителя класса String, это будет выглядеть так( в отдельном файле желательно)
Код

Imports System.Runtime.CompilerServices

Module Extensions
    <Extension()>
    Function SubstringBefore(ByVal this As String, ByVal separator As String) As String
        Return this.Substring(0, this.IndexOf(separator))
    End Function

    <Extension()>
    Function SubstringAfter(ByVal this As String, ByVal separator As String) As String
        Return this.Substring(this.IndexOf(separator) + 1)
    End Function
End Module



Дальше, везде, где этот модуль доступен ты сможешь эти методы вызывать так
Код

s.SubstingBefore("*")
s.SubstringAfter("*")

Тут s - строка, содержащая звездочку. Первое выражение выдаст тебе все, что до звездочки, второе - все что после. Если методы окажутся недоступными где-то, то надо будет импортировать в код пространство имен, в котором ты определишь этот модуль.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
company05
Дата 3.3.2011, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Модератор
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 6.5.2010

Репутация: нет
Всего: нет



Спасибо! Получилось!
PM MAIL   Вверх
krewin
Дата 9.3.2011, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 27.8.2009

Репутация: 1
Всего: 1



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

Код

Function Exploid(ByVal Simb_ As String, ByVal Text_ As String, ByVal Put_ As Integer) As String
        Dim i As Integer
        Put_ = Put_ - 1
        For i = 1 To Put_
            If InStr(Text_, Simb_) = 0 Then GoTo 10
            Text_ = Mid(Text_, InStr(Text_, Simb_))
            Text_ = Mid(Text_, Len(Simb_) + 1)
        Next i
        If InStr(Text_, Simb_) = 0 Then
        Else
            Text_ = Left(Text_, InStr(Text_, Simb_) - 1)
        End If
10:
        Exploid = Text_
    End Function

    Function Exploid_Put(ByVal Simb_ As String, ByVal Text_ As String) As Integer
        Dim i As Integer
        Dim t As Integer
        t = 0
        For i = 1 To 1000
            If InStr(Text_, Simb_) = 0 Then GoTo 10
            t = t + 1
            Text_ = Mid(Text_, InStr(Text_, Simb_) + Len(Simb_) + 1)
        Next i
10:
        Exploid_Put = t + 1
    End Function


Exploid("[тут указываем разделитель он может быть как один символ так и более, неиспользуемый символ в русском языке это Ъ используй его]",[строка для поиска содержащая текст],[тут указываем ряд]) - эта функция возвращает текст разделителя

Exploid_Put("[тут указываем разделитель он может быть как один символ так и более, неиспользуемый символ в русском языке это Ъ используй его]",[строка с разделителем]) - эта функция показывает сколько разделителей всего

вот пример 

Код

dim a as string = "Слово1*Слово2*Слово3"
msgbox (Exploid("*",a,2)) ' извлекет Слово2


или

files - имеет значение путь к файлу
Код

Exploid("\", files, Exploid_Put("\", files))' вернет только имя файла

PM MAIL   Вверх
diadiavova
Дата 9.3.2011, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(krewin @  9.3.2011,  20:54 Найти цитируемый пост)
dim a as string = "Слово1*Слово2*Слово3"
msgbox (Exploid("*",a,2)) ' извлекет Слово2

А чем String.Split не устраивает?
Код

MsgBox("Слово1*Слово2*Слово3".Split("*")(1))

Цитата(krewin @  9.3.2011,  20:54 Найти цитируемый пост)
вернет только имя файла

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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
krewin
Дата 10.3.2011, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 27.8.2009

Репутация: 1
Всего: 1



Это один из нескольких способов. (exploid аналог в php)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1026 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.