Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
ctac1412
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
#1

Замена одной кавычки на две - Visual Basic .NET

06.09.2016, 21:07. Просмотров 390. Ответов 14
Метки нет (Все метки)

Добрый день, Товарищи!
Что то не идет в голову мысли, вроде легкая задача и не хочется придумывать лишнию муть. Чувствую что где то рядом легкий однострочный ответ))

Есть строка.
Нужно в этой строке заменить кавычку на две кавычки при условии.
1.кавычка одна. Пример : aaa"aaa -верно(менять), aaa""aaa - не верное( не менять)
2.кавычка не первый символ в строке и не последний.

Заранее спасибо.

итог замены в первом примере aaa""aaa
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2016, 21:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Замена одной кавычки на две (Visual Basic .NET):

В DataGridView выводится две таблицы БД вместо одной
К одной форме подключаю две таблицы. один столбец из одной таблицы вывожу в...

В TextBox пишется две буквы вместо одной при нажатии клавиш
Здравствуйте! Недавно решил написать транслитератор для VB.NET 2010 и...

Замена одной буквы на две
Написать программу, которая заменяет в указанном (введенном с клавиатуры) слове...

Замена спец знаков HTML на кавычки
Подскажите, уважаемые форумчане! Нужна простая замена спец символов HTML на...

Кавычки. Заменить по разному в одной строке
Подскажите пожалуйста, как в одной и той же html-строке двойные кавычки у...

FIREBIRD, две базы, две таблицы, скопировать данные из одной в другую
В наличии имеются две базы данных Firebird. Часть информации из одной нужно...

14
Yury Komar
Модератор
Эксперт .NET
2364 / 2169 / 346
Регистрация: 27.01.2014
Сообщений: 3,899
Завершенные тесты: 1
07.09.2016, 04:27 #2
ну а что тут городить?
vb.net
1
YourText = YourText.Replace("'", chr(34))
0
Kulma
426 / 365 / 62
Регистрация: 25.07.2015
Сообщений: 668
07.09.2016, 06:51 #3
Цитата Сообщение от Yury Komar Посмотреть сообщение
ну а что тут городить?
Неа. нагородить слегка придётся
У меня тоже первая мысль про Replace была ,
пока в условия хитрые не вник -
Цитата Сообщение от ctac1412 Посмотреть сообщение
Нужно в этой строке заменить кавычку на две кавычки при условии.
1.кавычка одна. Пример : aaa"aaa -верно(менять), aaa""aaa - не верное( не менять)
2.кавычка не первый символ в строке и не последний.
Я пока завис с решением
0
Gilford
38 / 38 / 5
Регистрация: 31.03.2013
Сообщений: 118
Завершенные тесты: 3
07.09.2016, 07:23 #4
vb.net
1
2
3
4
5
6
7
dim str as string = "aaa""aaa, aaa""""aaa"
dim strPos as integer
Do While True
strPos= str.IndexOf("""")
If strPos < 0 Then Exit Do
str = str.Replace("""", chr(34)) 'Заменяем
Loop
Может можно более как-то красиво написать, но это должно работать

Добавлено через 5 минут

Не по теме:

Не верно))

0
Yury Komar
Модератор
Эксперт .NET
2364 / 2169 / 346
Регистрация: 27.01.2014
Сообщений: 3,899
Завершенные тесты: 1
07.09.2016, 07:25 #5
Kulma, нужен ТС для уточнения его задания но я понял именно так - ЗАМЕНИТЬ ВСЕ ОДИНАРНЫЕ НА ДВОЙНЫЕ.
0
vxsw
69 / 69 / 10
Регистрация: 15.08.2012
Сообщений: 71
07.09.2016, 08:43 #6
Цитата Сообщение от Yury Komar Посмотреть сообщение
ЗАМЕНИТЬ ВСЕ ОДИНАРНЫЕ НА ДВОЙНЫЕ.
но при этом, если уже есть двойные,то их не трогать. прямым реплейсом, двойная кавычка станет четверной.
я вот не понял, что делать с кавычками когда их 3 и больше. просто игнорировать как и двойные?
если так, то я-бы сделал как-то так (пардон, но ни чего умнее в голову не лезет ):
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  Dim iString As String = "aaa" & Chr(34) & Chr(34) & Chr(34) & "aaa, aaa" & Chr(34) & "aaa"
  Dim n, tn As Integer
  Dim oString, tChar As String
  Dim AfterQ As Boolean = False
  tn = iString.Length
  oString = ""
  For n = 1 To tn
   tChar = Strings.Mid(iString, n, 1)
   Select Case tChar
    Case Chr(34)
     If Not AfterQ Then
      If Not Strings.Mid(iString, n + 1, 1) = Chr(34) Then oString &= Chr(34)
     End If
     AfterQ = True
    Case Else
     AfterQ = False
   End Select
   oString &= tChar
  Next n
 
  Return oString
если таких операций много, или строка ну ооооочень длинная, то лучше через стрингбилдера.
0
SoftIce
comment ca va
10427 / 3930 / 1005
Регистрация: 27.07.2011
Сообщений: 9,503
Завершенные тесты: 1
07.09.2016, 09:15 #7
Такой вариант
Замена одной кавычки на две
vb.net
1
2
3
4
5
6
7
8
9
10
    Private Function MyReplace(ByVal stIn As String) As String
        Dim s1 As String = """", stOut As String = ""
        For i As Integer = 1 To Len(stIn)
            stOut &= Mid(stIn, i, 1)
            If (i > 2 And i < Len(stIn) - 1) Then
                If Mid(stIn, i, 1) = s1 And (Mid(stIn, i + 1, 1) <> s1 And Mid(stIn, i - 1, 1) <> s1) Then stOut &= s1
            End If
        Next
        Return stOut
    End Function
2
Yury Komar
Модератор
Эксперт .NET
2364 / 2169 / 346
Регистрация: 27.01.2014
Сообщений: 3,899
Завершенные тесты: 1
07.09.2016, 09:57 #8
vxsw, ну так может быть делать сначала реплэйс двух рядом стоящих одинарных и затем оставшиеся одинарные... а лучще делать сперва проверку на содержание двух одинарных, чтоб небыло ошибочных замен.
0
vxsw
69 / 69 / 10
Регистрация: 15.08.2012
Сообщений: 71
07.09.2016, 10:28 #9
Цитата Сообщение от Yury Komar Посмотреть сообщение
vxsw, ну так может быть делать сначала реплэйс двух рядом стоящих одинарных и затем оставшиеся одинарные...
так двойные и больше, должны остаться нетронутыми на сколько я понял
0
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
07.09.2016, 11:11 #10
Я бы сделал проще

vb.net
1
2
        Dim S As String = "abc""ser RTY""""QWE bnm""""IOP ZXC""vbn VBNM""""""hgf"
        MsgBox(String.Join("""""", S.Split(New String() {""""}, StringSplitOptions.RemoveEmptyEntries)))
3
Миниатюры
Замена одной кавычки на две  
SoftIce
comment ca va
10427 / 3930 / 1005
Регистрация: 27.07.2011
Сообщений: 9,503
Завершенные тесты: 1
07.09.2016, 11:28 #11
Цитата Сообщение от Памирыч Посмотреть сообщение
Я бы сделал проще
У Вас второе условие не выполняется. И тройные кавычки заменяются на двойные. Хотя ТС не написал как рассматривать тройные - то ли они сами по себе, то ли это двойные и одинарные, то ли три одинарных
2
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
07.09.2016, 11:39 #12
Ну я посчитал, что автор имеет ввиду, что кавычка может располагаться где угодно, а не как бы следовало ожидать - на границе слова. Этакое уточнение. Я бы на месте ТС это тоже уточнил, на всякий
Про тройные я не заморачивался. Пусть автор посмотрит, подходит ему такое решение на практике или нет
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25624 / 17177 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
07.09.2016, 11:44 #13
Лучший ответ Сообщение было отмечено ctac1412 как решение

Решение

А я бы написал так:
vb.net
1
2
        Dim S As String = "abc""ser RTY""""QWE bnm""""IOP ZXC""vbn VBNM""""""hgf"
        MsgBox(Regex.Replace(S, "(?<!"")""(?!"")", ""))
, если только одинарные надо удалять, а остальные не трогать.
5
diadiavova
3645 / 1233 / 392
Регистрация: 11.04.2015
Сообщений: 2,310
Записей в блоге: 33
07.09.2016, 12:06 #14
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Цитата Сообщение от volvo Посмотреть сообщение
А я бы написал так:
Я бы еще добавил (?<!""|^)""(?!""|$), чтобы исключить первую кавычки в начале и конце строки.
4
ctac1412
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
07.09.2016, 16:24  [ТС] #15
Всем большое спасибо за отклик!!!
Новы день, новые условия. Оказалось что не обязательно не трогать последнюю и первую. В этой связи под мой случай счел самым полезным( да и люблю я регулярку, вот он однострочный вариант))
Цитата Сообщение от diadiavova Посмотреть сообщение
(?<!""|^)""(?!""|$)
0
07.09.2016, 16:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2016, 16:24
Привет! Вот еще темы с решениями:

Замена в текстовом файле заключённой в кавычки части каждой строки вместе с кавычками
Здравствуйте. Пожалуйста помогите разобраться в следующей задаче. Есть...

Две таблицы одной базы на одной форме
Здрасти! Есть БД access связанная с делфей. В этой БД есть несколько таблиц....

в заданной строке содержатся двойные кавычки. Напечатать все слова, взятые в кавычки.
в заданной строке содержатся двойные кавычки. Напечатать все слова, взятые в...

Что обозначают тройные кавычки (двойные кавычки)?
res1 = wsh.Run(&quot;&quot;&quot;C:\FPC\2.6.0\bin\i386-win32\fpc.exe&quot;&quot; d:\script\sumcifr.pas&quot;,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru