Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
.NET 4.x

Как удалить из начала строки, определённую часть строки?

21.06.2024, 02:27. Показов 3085. Ответов 45

Студворк — интернет-сервис помощи студентам
Всем добрый ночер али день!

Имеется строка
Dim a as string = "HKEY_CLASSES_ROOT\AllFilesystemObje cts"

Как из строки удалить начальную часть, точнее вот эту "HKEY_CLASSES_ROOT" , причём предварительно проверив существует ли эта часть вообще в строке?

Мне лично кроме такого варианта в голову ничего не приходит.



VB.NET
1
2
3
4
5
 Dim a as string = "HKEY_CLASSES_ROOT\AllFilesystemObjects"
        If a.StartsWith("HKEY_CLASSES_ROOT\") Then
            a = a.Replace("HKEY_CLASSES_ROOT\", "")
            
        End If
Может у кого то есть другой вариант?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.06.2024, 02:27
Ответы с готовыми решениями:

Удалить определённую часть каждой строки в текстовом файле
подскажите пожалуйста... В файле 1.txt есть список выведенных файлов: И так далее. Что прописать в команднике, чтобы...

Удалить часть строки от начала предложения до заданного пробела
Здравствуйте, в предложении как удалить всё от начала предложения до заданного пробела? Спасибо

Как удалить перчисленные строки из начала строки?
Есть ли такая возможность "лаконично" удалить перчисленные слова из начала строки? У меня есть 4 типа строк: 1) слово 2) а слово 3)...

45
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
24.06.2024, 10:11  [ТС]
Студворк — интернет-сервис помощи студентам
Yury Komar, а вот это действительно интересный вопрос. Если есть короткая форма написания, то... Нужно где то почитать и изучить
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
24.06.2024, 12:37
edmonsur, В случае с командной строкой, то можно и сокращенные названия.
Нововведение заключается в следующем:

HKEY_CURRENT_USER = HKCU
HKEY_CLASSES_ROOT = HKCR
HKEY_LOCAL_MACHINE = HKLM
HKEY_USERS = HKU


Так что, когда вам нужно перейти непосредственно к HKEY_CURRENT_USER\Control Panel\Desktop , можно ввести следующее в адресной строке:

HKCU\Control Panel\Desktop

После того, как вы нажмете клавишу Enter, путь будет автоматически изменен на HKEY_CURRENT_USER\Control Panel\Desktop.
Как оно в .NET, не могу утверждать, но если пути явно не указаны в вашем коде, и подразумевается ручной ввод пользователем, то МОЖНО предусмотреть обработку и таких сокращенных имен.
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18364 / 14295 / 5370
Регистрация: 17.03.2014
Сообщений: 28,978
Записей в блоге: 1
24.06.2024, 14:27
Цитата Сообщение от edmonsur Посмотреть сообщение
Нужно только подумать куда
О чем тут думать? У методов одинаковое название и одинаковая сигнатура. Просто заменяем один другим.

Цитата Сообщение от edmonsur Посмотреть сообщение
допусти вы сделали приложение. вроде бы всё работает. вот только у пользователя приложение глючит и падает. Что увидит пользователь когда прога упадёт? А у меня и на этот случай будет свой случай
Хорошо что вы про это думаете, но пользователю нет нужды знать имя метода где произошла ошибка. Данную информацию можно показать так как это сделано в стандартном диалоге обработки исключений в Windows Forms - в скрытой секции с textbox откуда пользователь может скопировать текст и отправить разработчику. Не говоря о том что можно в лог файл это записать.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18364 / 14295 / 5370
Регистрация: 17.03.2014
Сообщений: 28,978
Записей в блоге: 1
24.06.2024, 20:58
Еще такой момент. В случае функции HKey достаточно показать пользователю сообщение что название куста не распознано. Имя метода не представляет для него никакой пользы. Для вас да, но, как уже было сказано, эту информацию можно представить другим способом.
1
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
25.06.2024, 06:36  [ТС]
OwenGlendower, Дык пользователь увидит просто ошибку. Без всякого описания.. но это только верхушка айсберга.. а дальше если есть интернет соединение .. улетит на сервер... примерно то что там стоит.. больше об ошибке мне ничего знать не нужно.
отловить это всё, можно центрально, через Application.ThreadException

Добавлено через 31 минуту
OwenGlendower,
Еще такой момент. В случае функции HKey достаточно показать пользователю сообщение что название куста не распознано. Имя метода не представляет для него никакой пользы. Для вас да, но, как уже было сказано, эту информацию можно представить другим способом.
не знаю...может я как то ни так объясняю.. но на данном этапе ..это вообще не имеет никакого значения.. это просто заглушка... которая стоит почти в каждой функции.. я переиграю всё ещё 10 раз.

Кстати ... пока мы говорим о ошибках ... правильнее было бы сделать вот так, а не возвращать назад строку

VB.NET
1
2
3
4
5
6
    Function RemovePrefix(s As String, prefix As String) As String
        If String.IsNullOrEmpty(s) Then Throw New ArgumentNullException(NameOf(s))
        If String.IsNullOrEmpty(prefix) Then Throw New ArgumentNullException(NameOf(prefix))
        If s.Length < prefix.Length Then Throw New ArgumentException(NameOf(s))
        Return If(s.StartsWith(prefix, StringComparison.Ordinal), s.Substring(prefix.Length), s)
    End Function

Yury Komar, идея хорошая... нужно об этом подумать.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
25.06.2024, 06:57
edmonsur, Так а что там думать

VB.NET
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
    ''' <summary>
    ''' Вспомогательная функция для определения базового ключа + частичная проверка ключа на вшивость
    ''' </summary>
    ''' <param name="key"></param>
    ''' <returns></returns>
    Private Function HKey(key As String) As RegistryHive
        Select Case Extract(key)
        Case "HKEY_CLASSES_ROOT", "HKCR"
            Return RegistryHive.ClassesRoot
        Case "HKEY_CURRENT_USER", "HKCU"
            Return RegistryHive.CurrentUser
        Case "HKEY_LOCAL_MACHINE", "HKLM"
            Return RegistryHive.LocalMachine
        Case "HKEY_USERS", "HKU"
            Return RegistryHive.Users
        Case "HKEY_PERFORMANCE_DATA", "HKPD"
            Return RegistryHive.PerformanceData
        Case "HKEY_CURRENT_CONFIG", "HKCC"
            Return RegistryHive.CurrentConfig
        Case "HKEY_DYN_DATA", "HKDD"
            Return RegistryHive.DynData
        Case Else
            Throw New Exception($"Error ('{GetCurrentMethod().Name}') - Key is not valid - > '{key}' ")
        End Select
    End Function
2
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
25.06.2024, 08:38  [ТС]
Yury Komar, если я правильно припоминаю после компиляции Select Case превратиться в if тогда уже сразу писать if
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
25.06.2024, 08:46
edmonsur, Ну если вы в таком ключе мыслите, тогда сразу можно писать IL код или же на ассемблере писать, чтобы компилятор делал меньше действий при сборке вашего ПО...
Select Case тут для удобстра, если не нравится он, пишите на IF'ах, я ж не настаиваю.
1
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
25.06.2024, 09:12  [ТС]
OwenGlendower,


VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
    Function RemovePrefixIII(s As String, prefix As String) As String
        If String.IsNullOrEmpty(s) Then Throw New ArgumentNullException(NameOf(s))
        If String.IsNullOrEmpty(prefix) Then Throw New ArgumentNullException(NameOf(prefix))
        If s.Length < prefix.Length Then Throw New ArgumentException(NameOf(s))
        Return If(s.StartsWith(prefix, StringComparison.Ordinal), New String(s.ToCharArray(prefix.Length, s.Length - prefix.Length)), s)
    End Function
    
        Public Function TrimStartStringIV(s As String, prefix As String) As String
        If String.IsNullOrEmpty(s) Then Throw New ArgumentNullException(NameOf(s))
        If String.IsNullOrEmpty(prefix) Then Throw New ArgumentNullException(NameOf(prefix))
        If s.Length < prefix.Length Then Throw New ArgumentException(NameOf(s))
        Return If(s.StartsWith(prefix, StringComparison.Ordinal), s.TrimStart(prefix.ToCharArray), s)
    End Function
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18364 / 14295 / 5370
Регистрация: 17.03.2014
Сообщений: 28,978
Записей в блоге: 1
25.06.2024, 11:27
Цитата Сообщение от edmonsur Посмотреть сообщение
Дык пользователь увидит просто ошибку. Без всякого описания.. но это только верхушка айсберга.. а дальше если есть интернет соединение .. улетит на сервер... примерно то что там стоит.. больше об ошибке мне ничего знать не нужно.
отловить это всё, можно центрально, через Application.ThreadException
Прекрасно, но если вы так сделали, то вы должны знать что Exception.ToString() вернет всю необходимую информацию и поэтому GetCurrentMethod().Name не нужен.

Цитата Сообщение от edmonsur Посмотреть сообщение
Кстати ... пока мы говорим о ошибках ... правильнее было бы сделать вот так, а не возвращать назад строку
Необязательно. Оба варианта имеют право на существование.

Цитата Сообщение от edmonsur Посмотреть сообщение
Return If(s.StartsWith(prefix, StringComparison.Ordinal), New String(s.ToCharArray(prefix.Length, s.Length - prefix.Length)), s)
Зачем вы заменили Substring на New String(s.ToCharArray?

Цитата Сообщение от edmonsur Посмотреть сообщение
не знаю...может я как то ни так объясняю.
Дело не в ваших объяснениях, а в вашем коде.
0
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
25.06.2024, 12:00  [ТС]
OwenGlendower,
Зачем вы заменили Substring на New String(s.ToCharArray?
как вариант. не знаю правда насколько он быстрый... за TrimStart тоже не скажу
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18364 / 14295 / 5370
Регистрация: 17.03.2014
Сообщений: 28,978
Записей в блоге: 1
25.06.2024, 12:23
Цитата Сообщение от edmonsur Посмотреть сообщение
как вариант
Делать вам нечего.

Цитата Сообщение от edmonsur Посмотреть сообщение
не знаю правда насколько он быстрый
Substring быстрее. Хотя бы потому что он создает строку без промежуточного массива.

Добавлено через 17 минут
Цитата Сообщение от edmonsur Посмотреть сообщение
за TrimStart тоже не скажу
Этот метод в данном случае не подходит. Он удаляет переданные символы в начале строки, а не целую строку.
0
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
25.06.2024, 21:47  [ТС]
Yury Komar, да я не против... просто у меня уже написано с иФом... просто дополнить легче чем переписать...

хотя что я туплю... вы же уже написали

Добавлено через 30 минут
OwenGlendower,
Substring быстрее. Хотя бы потому что он создает строку без промежуточного массива.
Теперь нечего не понимаю. string это массив состоящий из char, поправите меня если это не так. Как может Substring не создавать промежуточного массива? Прям какие то потусторонние возможности у этого Substring
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18364 / 14295 / 5370
Регистрация: 17.03.2014
Сообщений: 28,978
Записей в блоге: 1
25.06.2024, 22:52
Цитата Сообщение от edmonsur Посмотреть сообщение
string это массив состоящий из char, поправите меня если это не так.
Всё верно. Плюс длина еще отдельно хранится.

Цитата Сообщение от edmonsur Посмотреть сообщение
Как может Substring не создавать промежуточного массива?
Очень просто. Он создает строку нужного размера и копирует в неё часть массива из оригинальной строки. В коде это примерно так выглядит:
VB.NET
1
2
3
4
5
' Что делает Substring
Dim source() As Char = {"a", "b", "\", "c", "d", "e"}
Dim result() As Char
ReDim result(2)
Array.Copy(source, 3, result, 0, result.Length)
VB.NET
1
2
3
4
5
6
7
8
9
10
' Что делает ваш код
Dim source() As Char = {"a", "b", "\", "c", "d", "e"}
 
Dim tempArray() As Char
ReDim tempArray(2)
Array.Copy(source, 3, tempArray, 0, tempArray.Length)
 
Dim result() As Char
ReDim result(2)
Array.Copy(tempArray, result, tempArray.Length)
Нетрудно заметить что ваш код создает один лишний массив и делает одну лишнюю операцию копирования.

Добавлено через 42 минуты
Цитата Сообщение от edmonsur Посмотреть сообщение
просто у меня уже написано с иФом... просто дополнить легче чем переписать...
Вы о чем вообще? Yury Komar, привел готовый код. Просто копируете его вместо своего.
2
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
25.06.2024, 23:03  [ТС]
Yury Komar, да я не против... просто у меня уже написано с иФом... просто дополнить легче чем переписать...

хотя что я туплю... вы же уже написали
вы пьете там что ли... ?
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18364 / 14295 / 5370
Регистрация: 17.03.2014
Сообщений: 28,978
Записей в блоге: 1
25.06.2024, 23:04
Цитата Сообщение от edmonsur Посмотреть сообщение
вы пьете там что ли... ?
Нет
0
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
25.06.2024, 23:31  [ТС]
OwenGlendower,

Не по теме:

а я пью... и то только по тому что у нас в германдии, пиво как приправа к еде

0
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
26.06.2024, 17:40  [ТС]
OwenGlendower,

Нетрудно заметить что ваш код создает один лишний массив и делает одну лишнюю операцию копирования.

VB.NET
1
Return If(s.StartsWith(prefix, StringComparison.Ordinal), New String(s.ToCharArray(prefix.Length, s.Length - prefix.Length)), s)
И ....
VB.NET
1
Return If(s.StartsWith(prefix, StringComparison.Ordinal), s.ToCharArray(prefix.Length, s.Length - prefix.Length).Tostring, s)
это не тоже самое ... в одном случае это string, а в другом System.Char[]
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18364 / 14295 / 5370
Регистрация: 17.03.2014
Сообщений: 28,978
Записей в блоге: 1
26.06.2024, 17:52
Цитата Сообщение от edmonsur Посмотреть сообщение
то не тоже самое ... в одном случае это string, а в другом System.Char[]
Разумеется. Это даже начинающим известно.
0
77 / 73 / 6
Регистрация: 11.04.2021
Сообщений: 304
Записей в блоге: 7
26.06.2024, 18:01  [ТС]
OwenGlendower, ну не знаю...кому там что известно... но тема интересная.. думаю нужно в неё углубиться.

А что быстрее... конвертация или преобразование?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.06.2024, 18:01

Как убрать из строки адреса определенную ее часть
как убрать из урла /component/ ? при этом Jroute::_(index.php?option=com_name&amp;view=default) фармирует /component/?view=default вот такая...

Определить длину строки. Если длина строки >6, удалить часть строки в { } скобках.
Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши &quot;Ввод&quot;. Программа должна определить длину...

Как выглядит код, который редактирует определенную часть определенной строки?
Есть текстовый файл &quot;C:\Users\Юрий\Desktop\eHot\mineflayer-master\index.js&quot;, в нем надо найти слово &quot;host:&quot;, включить программку, и...

Удалить любые удвоенные символы из исходной строки. Найти номер первого удвоенного символа относительно начала строки
Удалить любые удвоенные символы из исходной строки. Найти номер первого удвоенного символа относительно начала строки. Предусмотреть ввод...

Как удалить от начала строки до определенного символа/слова
Здравствуйте, есть у меня строка &quot;prxfire1.Text&quot;: 2 x &lt;a...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru