Символ табуляции в настройках C#
Я пытаюсь поставить символ табуляции как \t
в настройки приложения C# (как char
). Я потерпел неудачу до сих пор. Я также пытался использовать другую сериализацию как Binary
или жеXML
но не заставил его работать.
Итак, мой простой вопрос: можете ли вы как-то поместить символ табуляции в настройки приложения / пользователя в C#?
ОБНОВИТЬ:
Это.NET 4.5.2
Оказывается, что также с типом string
это глючит Когда я вставляю вкладку, например, из notepad++, она помещает новую строку и некоторые пробельные символы в app.config
но без символа табуляции:
2 ответа
Использование 	
или же \\t
вместо \t
в конфигурационном файле
Чтобы сделать это через интерфейс VS, используйте стандартный прием, который работает почти во всех приложениях и случаях, включая этот: поместите вкладку в буфер обмена и вставьте ее в целевое приложение.
Для других, которые ищут, как сохранить "TAB" или "SPACE" и т. Д. В конфигурации...
Вы можете просто использовать его десятичное значение из таблицы ASCII ( http://www.asciitable.com/). Так, например, для пробела это значение 32, для табуляции это значение 9. Некоторые примеры...:
ПРИМЕР 1:
Сохранить одну вкладку в App.config
раздел конфигурации:
<setting name="OneTabString" serializeAs="String">
<value>9</value>
</setting>
Раздел приложения:
char tab = Convert.ToChar(int.Parse(Properties.Settings.Default.OneTabString));
string stringTab = tab.ToString();
ПРИМЕР 2:
Сохранить строку с несколькими вкладками в конфигурации (есть много способов, как это сделать, но, например,...)
Раздел конфигурации
<setting name="MultiTabString" serializeAs="String">
<value>9;9;9;9;9</value>
</setting>
Раздел приложения:
char[] tabs = Properties.Settings.Default.MultiTabString.GetCharsByDecimal(new char[] { ';' });
string stringTabs = string.Join(string.Empty, tabs);
//Extension method for getting chars by decimal from our string
public static char[] GetCharsByDecimal(this string inputString, char[] delimiters)
{
int[] charsDecimals = inputString.Split(delimiters, StringSplitOptions.RemoveEmptyEntries).Select(s => int.Parse(s)).ToArray();
char[] resultChars = new char[charsDecimals.Length];
for (int i = 0; i < charsDecimals.Length; i++)
{
resultChars[i] = Convert.ToChar(charsDecimals[i]);
}
return resultChars;
}
//Or safer variant of our extension method
public static char[] GetCharsByDecimal(this string inputString)
{
int[] charsDecimals = Regex.Split(inputString, @"\D+").Select(s => int.Parse(s)).ToArray();
char[] resultChars = new char[charsDecimals.Length];
for (int i = 0; i < charsDecimals.Length; i++)
{
resultChars[i] = Convert.ToChar(charsDecimals[i]);
}
return resultChars;
}
ПРИМЕР 3:
Сохранить разделители (включая вкладку) в конфигурации
Раздел конфигурации
<setting name="Delimiters" serializeAs="Xml">
<value>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>59</string>
<string>44</string>
<string>9</string>
<string>45</string>
<string>124</string>
<string>32</string>
</ArrayOfString>
</value>
</setting>
Раздел приложений
char[] delimiters = Properties.Settings
.Default
.Delimiters
.Cast<string>()
.Select(s => Convert.ToChar(int.Parse(s))).ToArray();