回したい
「ピーナッツ」と「ココア」にはまっています
の中へ
「ピーナッツ」と「ココア」にはまっています</p>
どうすればいいですか?そのための組み込み関数はありますか?
回したい
「ピーナッツ」と「ココア」にはまっています
の中へ
「ピーナッツ」と「ココア」にはまっています</p>
どうすればいいですか?そのための組み込み関数はありますか?
もちろん、組み込み関数はありません。最初の一重引用符を変更せずに、2 番目の引用符を変更したままにするにはどうすればよいでしょうか。必要な結果を得るには、その背後にさらにロジックが必要です。英語の構文を解釈するプログラムだと思います
もちろん、何かを書いた後に問題を指摘したので、必要に応じて編集してください。猫の尻尾用には書かれていません
Function trSmart(s As String) As String
Dim inSngl As Boolean = False
Dim inDbl As Boolean = False
For i = 1 To s.Length()
If s(i - 1) = "'"c Then
If inSngl Then
s = s.Substring(0, i - 1) & Chr(146) & s.Substring(i)
inSngl = False
Else
s = s.Substring(0, i - 1) & Chr(145) & s.Substring(i)
inSngl = True
End If
ElseIf s(i - 1) = """"c Then
If inDbl Then
s = s.Substring(0, i - 1) & Chr(147) & s.Substring(i)
inDbl = False
Else
s = s.Substring(0, i - 1) & Chr(148) & s.Substring(i)
inDbl = True
End If
End If
Next
Return s
End Function
これにより、空白が文字列の前後にあるかどうかが自動的に検出され、適切に動作します。
Public Function SmartQuotes(ByVal someString As String) As String
someString = " " + someString + " "
Dim oldstring = someString
someString = smarten(someString, "'"c, "‘"c, "’"c)
someString = smarten(someString, """"c, Chr(147), Chr(148))
If oldstring = someString Then
Return Trim(someString)
Else
Return SmartQuotes(someString)
End If
End Function
Public Function smarten(ByVal someString As String, ByVal original As Char, ByVal left As Char, ByVal right As Char) As String
If someString.Contains(original) Then
Dim index = someString.IndexOf(original)
If leftQuoteorRightquote(someString, index) Then
someString = someString.Remove(index, 1).Insert(index, left)
Else
someString = someString.Remove(index, 1).Insert(index, right)
End If
End If
Return someString
End Function
Public Function leftQuoteorRightquote(ByVal somestring As String, ByVal index As Integer) As Boolean
If somestring.Substring(index - 1, 1) = " " And somestring.Substring(index + 1, 1) <> " " Then
Return True
Else
Return False
End If
End Function