Символ табуляции в настройках 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();
Другие вопросы по тегам