从用户输入写入文件

时间:2014-05-18 01:40:06

标签: c#

我刚开始学习C#,现在我正在尝试使用File IO。我在将 tab \t)字符写入文件时遇到了一些问题。

到目前为止,这是我的代码:

static void Main(string[] args)
{
    string[] input = Console.ReadLine().Split(' ');
    Console.WriteLine(string.Join("\n", input));
    File.WriteAllLines(@"C:\Users\Shashank\Desktop\test.txt", input);
    Console.ReadKey();
}

当我运行脚本并输入此文本时:

hello \twhat \tis \tyour name

以下内容将写入我的文件:

hello
\twhat
\tis
\tyour
name

但是,我希望文件输出看起来像:

hello
    what
    is
    your
name

我已经在线查看过,但找不到能给我预期结果的解决方案。我也尝试使用StreamWriter,但无济于事。

3 个答案:

答案 0 :(得分:8)

仅当在字符串常量中使用时,

"\t"才是tab的表示。当它只是输入字符串时 - 没有任何东西以任何特殊的方式解释两个字符\t(对于所有其他转义序列都是如此)。

您可以使用String.Replace

自行替换它们
string[] input = Console.ReadLine().Replace(@"\t", "\t").Split(' ')

答案 1 :(得分:3)

实际上有一种在.NET中取消字符串的方法,尽管可能不是你期望的那样:

Regex.Unescape(string)

Console.WriteLine(Regex.Unescape(@"\tHello\nWorld"));

将导致(取决于您的标签缩进设置):

    Hello
World


因此,如果您想要取消输入字符串然后将其拆分为单独的字符串(行)以进行输出,您可以执行以下操作:

string[] input = Regex.Unescape( Console.ReadLine() ).Split(' ');
Console.WriteLine(string.Join("\n", input));
File.WriteAllLines(@"C:\Users\Shashank\Desktop\test.txt", input);
Console.ReadKey();

或者,您可以首先拆分然后使用Linq进行unescape:

string[] input = Console.ReadLine().Split(' ').Select(Regex.Unescape).ToArray();
Console.WriteLine(string.Join("\n", input));
File.WriteAllLines(@"C:\Users\Shashank\Desktop\test.txt", input);
Console.ReadKey();


如果您打算将空格序列视为单个分隔符,请使用:

input.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)

答案 2 :(得分:2)

问题似乎是控制台正在为你逃脱,也就是说,输入看起来像" hello \ twhat \ tis \ tyour name"。可以通过替换" \ t"来解决。用" \ t"使用string.Replace()。

string[] input = Console.ReadLine().Split(' ');
string text = string.Join("\n", input).Replace("\\t", "\t");
Console.WriteLine(text);
File.WriteAllText(@"D:\test.txt", text);
Console.ReadKey();

您可能希望使用Environment.NewLine而不是" \ n"。