Everytime I add CharW(34) to a string it adds two "" symbols
Example:
text = "Hello," + Char(34) + "World" + Char(34)
Result of text
"Hello,""World"""
How can I just add one " symbol?
e.g Ideal result would be:
"Hello,"World""
I have also tried:
text = "Hello,""World"""
But I still get the double " Symbols
Furthermore. Adding a CharW(39), which is a ' symbol only produces one?
e.g
text = "Hello," + Char(39) + "World" + Char(39)
Result
"Hello,'World'"
Why is this only behaving abnormally for double quotes? and how can I add just ONE rather than two?
Assuming you meant the old Chr function rather than Char (which is a type).It does not add two quotation mark characters. It only adds one. If you output the string to the screen or a file, you would see that it only adds one. The Visual Studio debugger, however, displays the VB-string-literal representation of the value rather than the raw string value itself. Since the way to escape a double-quote character in a string is to put two in a row, that's the way it displays it. For instance, your code:
text = "Hello," + Chr(34) + "World" + Chr(34)
Can also be written more simply as:
text = "Hello,""World"""
So, the debugger is just displaying it in that VB syntax, just as in C#, the debugger would display the value as "Hello, \"World\"".
The text doesn't really have double quotes in it. The debugger is quoting the text so that it appears as it would in your source code. If you were to do this same thing in C#, embedded new lines are displayed using it's source code formatting.
Instead of using the debugger's output, you can add a statement in your source to display the value in the debug window.
Diagnostics.Debug.WriteLine(text)
This should only show the single set of quotes.
Well it's Very eazy
just use this : ControlChars.Quote
"Hello, " & ControlChars.Quote & "World" & ControlChars.Quote
Related
I am working on the VBA scripting in Enterprise Architect, I tried to automate the creation of the elements(Artifact type) from excel.
My goal is to read the excel row by row and create the elements based on the names in the excel column and add the notes which I can get from another column. I implemented the following code.
'objExcel is an Excel application object
For i = 2 To rowCount
id = objExcel.Cells(i,1).Value
notes = objExcel.Cells(i,2).Value
set element = elements.AddNew( id, "Artifact")
'notes = Replace(notes, "\n", "\r\n")
'notes = Replace(notes, Chr(13) + Chr(10), "\r\n")
notes = Replace(notes, vbNewLine, "\r\n")
element.Update()
Next
Now the problem is, The description inside the notes is not displaying the new lines, it shows as a single line. There is a similar question is there in StackOverflow but that solution also not working.
ele.Notes = "111" + "\n" + "222\r\n333"";
ele.Update();
I tried the above code also but still the issue is there,its displaying as 111\n222\r\n333 in EAP.Is there any solution for this?
If you insert into an Excel cell some text with additional line breaks by Alt + Enter,
these are stored as CHR(10) (which is the same as vbLf in VBA).
A lot of Windows based text formats use a combination of a "line feed" and a "carriage return" instead (CHR(10) and CHR(13), equivalent to vbCrLf).
So please try:
notes = Replace(notes, vbLf, vbCrLf)
For more alternatives and differences between Windows and MacOS see here.
You need to convert text for notes with
formatted = Repository.GetFieldFromFormat (string Format, string Text)
Converts the value Text from the Format ‘HTML’, ‘RTF’ or ‘TXT’ to Enterprise Architect’s internal format. You can skip that if you just use plain ASCII above x1F and below x80.
For example you use it like
element.Notes =
Repository.GetFieldFromFormat ("HTML", "<ol><li>one<li>two<ol>");
if (!element.Update ()) print "Update failed";
Vice versa
html = GetFormatFromField(("HTML", element.Notes)
will return a HTML string from the notes property of the element.
I'm having a hard time understanding how to place a double quote (") within a String in VBA. I know that I can easily do this using the char(34) function. I also understand that another way of doing this is to use 4 double quotes: """". All of this comes from a previous SO post:
How do I put double quotes in a string in vba?
However, my question is.... Why are 4 quotes needed? Do the first two act as the escape, the third is the quote itself, and the fourth is the terminating quote? Or does it work in a different way? I haven't been able to find a concrete answer as to how VBA treats these double quotes.
I've also noticed that if I try adding or removing the number of double quotes within a String, Visual Studio will dynamically add or remove double quotes. For example, I initially had the following String:
data = TGName + """ + iterator.Value + """
...which produces the following within a message box:
However, if I try adjusting the second set of double quotes at the end of the String (+ """) from 3 to 4, Visual Studio automatically adjusts this to 5. There's no way for me to only have 4 quotes at the end. This is the resulting String within a message box:
The Strings within the message boxes aren't the actual output that I'm hoping to have, they're purely for experimental purposes. However, what I've noticed is that there clearly is a requirement for the number of quotes that are allowed within a String in VBA. Does anyone know what that requirement is? Why is the IDE forcefully inserting an additional quote in the second String? Can someone explain the differences between the actual String contents and the formatting quotes within both cases that I've described?
As always, any assistance on this would be greatly appreciated :)
The general rule is as follows.
The first double-quote (DQ) announces the beginning of a string. Afterwards, some DQ announces the end of the string. However, if a DQ is preceded by a DQ, it is "escaped". Escaped means it is a character part of the string, not a delimiter.
Simply put, when you have any even number of consecutive double-quotes inside a string, say 2n, this means there are n escaped double-quotes. When the number is odd, say 2n+1, you have n escaped DQs and a delimiter.
Examples
""" + iterator.Value + """
' delimiter " + iterator.Value + " delimiter
' ^ escaped ^ escaped
""" + iterator.Value + """"
' delimiter " + iterator.Value + "" ' (missing enclosing delimiter)
' ^ escaped ^^ both escaped.
In this latter case the last delimiter is missing, For this reason VS inserted it for you, and you got 5 DQs.
Finally the particular case """" (just 4 DQs), the first and last are delimiters, and inside there's one escaped DQ. This is equivalent to chr(34).
To append iterator value to TGName in quotes, you can do this:
Data = TGName & """" & iterator.Value & """"
or this:
Data = TGName & Chr(34) & iterator.Value & Chr(34)
Note: I replaced + signs with & because that's simply a VBA best practice when concatenating strings.
Everytime I add CharW(34) to a string it adds two "" symbols
Example:
text = "Hello," + Char(34) + "World" + Char(34)
Result of text
"Hello,""World"""
How can I just add one " symbol?
e.g Ideal result would be:
"Hello,"World""
I have also tried:
text = "Hello,""World"""
But I still get the double " Symbols
Furthermore. Adding a CharW(39), which is a ' symbol only produces one?
e.g
text = "Hello," + Char(39) + "World" + Char(39)
Result
"Hello,'World'"
Why is this only behaving abnormally for double quotes? and how can I add just ONE rather than two?
Assuming you meant the old Chr function rather than Char (which is a type).It does not add two quotation mark characters. It only adds one. If you output the string to the screen or a file, you would see that it only adds one. The Visual Studio debugger, however, displays the VB-string-literal representation of the value rather than the raw string value itself. Since the way to escape a double-quote character in a string is to put two in a row, that's the way it displays it. For instance, your code:
text = "Hello," + Chr(34) + "World" + Chr(34)
Can also be written more simply as:
text = "Hello,""World"""
So, the debugger is just displaying it in that VB syntax, just as in C#, the debugger would display the value as "Hello, \"World\"".
The text doesn't really have double quotes in it. The debugger is quoting the text so that it appears as it would in your source code. If you were to do this same thing in C#, embedded new lines are displayed using it's source code formatting.
Instead of using the debugger's output, you can add a statement in your source to display the value in the debug window.
Diagnostics.Debug.WriteLine(text)
This should only show the single set of quotes.
Well it's Very eazy
just use this : ControlChars.Quote
"Hello, " & ControlChars.Quote & "World" & ControlChars.Quote
I'm writing a VBA macro that will send a string to the command line like below:
str = "SELECT (edr.VersionName + ' ' + edr.BuildName)"
RSP = Shell(Environ$("COMSPEC"), vbNormalFocus)
SendKeys str
But the issue comes that the special keys like ( and + are lost in translation; the command line ends up like below:
SELECT edr.VersionName ' ' edr.BuildName
How do I prevent those special characters from being lost in the process?
You can get the '+' symbols to show up by using this string:
str = "SELECT (edr.VersionName += ' ' += edr.BuildName)"
In the SendKeys function in VBA, the '+' symbol is used to indicate the {SHIFT} key. So, {SHIFT}=, is actually the '+' symbol; at least on my keyboard.
Using that logic, '+9' and '+0' should give you '(' and ')' but I haven't gotten those to work yet.
EDIT
Ok, you can get the parentheses to show up, but you kind of have to include them twice:
str = "SELECT +9" & "(edr.VersionName += ' ' += edr.BuildName)" & "+0"
Again, keep in mind, the above string works for my keyboard (standard English). If you are using a different keyboard layout, the characters after the '+' signs will most likely be different.
Actually I found out another way to display those special characters, by enclosing it with {} it will show up in my command line. Thanks for the help!
Need help with reading special characters within my VB code. ASCII code Char(34) = " works fine but Char(60) = < and Char(62) = > are not being read.
My Code
node.FirstChild.InnerText = Chr(60) & "httpRuntime executionTimeout=" & Chr(34) & "999999" & Chr(34) & " maxRequestLength=" & Chr(34) & "2097151" & Chr(34) & "/" & Chr(62)
Without ASCII Code
'node.FirstChild.InnerText = "<httpRuntime executionTimeout="999999" maxRequestLength="2097151"/>"
Are you trying to modify a Config file? Try:-
node.FirstChild.InnerXml = "<httpRuntime executionTimeout=""999999"" maxRequestLength=""2097151"" />"
Note all that Chr marlarky is unnecessary, were you trying to avoid < and > being encoded as XML entities?
Maybe this doesn't answer your question, but you could use two double quotes to escape the quotes character in VB.NET:
node.FirstChild.InnerText = _
"<httpRuntime executionTimeout=""999999"" maxRequestLength=""2097151"" />"
I'm just guessing: you could use the String.Format method for your purposes:
node.FirstChild.InnerText = _
String.Format( _
"<httpRuntime executionTimeout=""{0}"" maxRequestLength=""{1}"" />", _
timeoutValue.ToString(), reqLenValue.ToString())
You'll need to give more information about how you're "seeing" the results. In my experience, problems with this are as likely to be about viewing strings in the debugger as getting the right strings in the first place.
I don't really see why you need to use Chr(60) etc at all, other than for the quotes. What happens when you just use < and > in your code?
I strongly suggest you dump the string out to the console rather than using the debugger - the debugger tries to show you how you could represent the string in code, rather than showing you the contents verbatim.
Of course, if this is XML then I'd expect serializing the XML out again to end up escaping the < and > - again, more information about what you're trying to do would be helpful. The absolute ideal (IMO) would be a short but complete program demonstrating the problem - a small console app which does one thing, and a description of what you want it to do instead.