.NET 的 System.Console 可以配置为从右到左打印吗?
Can .NET's System.Console be configured to print Right To Left?
在解决 here 中描述的打印非 ascii 字符的问题后,我想知道是否可以将控制台配置为从右到左打印?
我现在正在玩 Visual Studio T4 模板,想亲眼看看尝试从数据库查找表中自动生成枚举的结果 - 为此,我想在此控制台中测试自己我为此写的应用程序。
显然,作为解决方法,打印以下内容对我有帮助:
new string(str.ToCharArray().Reverse().ToArray())
但是控制台是否支持 RTL 打印?
由于没有发现内置支持,我从其他帖子了解到您可以使用控制台的光标进行游戏。所以像下面这样的东西会做到这一点:
private static void Main(string[] args)
{
Console.OutputEncoding = Encoding.Unicode;
List<string> sentences = new List<string>();
sentences.Add(string.Format("אברהם"));
sentences.Add(string.Format("שורה {0}, אחרי אברהם", 2));
foreach (var sentence in sentences)
{
WriteLineRTL(sentence);
}
}
private static void WriteLineRTL(string input)
{
var chars = input.ToCharArray();
Console.CursorLeft = chars.Length;
for (int i = 0; i < chars.Length; i++)
{
Console.Write(chars[i]);
Console.CursorLeft -= 2;
}
Console.WriteLine();
}
输出:
如果除了以相反的方式 (RTL) 呈现字符串之外,您还想打印与屏幕右侧对齐的字符串,请使用:
private static void WriteLineRtl(string input)
{
Console.CursorLeft = Console.WindowWidth - input.Length;
for (int i = input.Length - 1; i >= 0; i--)
Console.Write(input[i]);
}
示例:
using static System.Console;
class Program
{
static void Main(string[] args)
{
WriteLineRtl("שלום,");
WriteLineRtl("בהמשך לשיחתנו הטלפונית,");
WriteLineRtl("רציתי להודיע שהכל בסדר.");
WriteLineRtl("שלום ולהתראות!");
Read();
}
static void WriteLineRtl(string input)
{
CursorLeft = WindowWidth - input.Length;
for (int i = input.Length - 1; i >= 0; i--)
Write(input[i]);
}
}
输出:
在解决 here 中描述的打印非 ascii 字符的问题后,我想知道是否可以将控制台配置为从右到左打印?
我现在正在玩 Visual Studio T4 模板,想亲眼看看尝试从数据库查找表中自动生成枚举的结果 - 为此,我想在此控制台中测试自己我为此写的应用程序。
显然,作为解决方法,打印以下内容对我有帮助:
new string(str.ToCharArray().Reverse().ToArray())
但是控制台是否支持 RTL 打印?
由于没有发现内置支持,我从其他帖子了解到您可以使用控制台的光标进行游戏。所以像下面这样的东西会做到这一点:
private static void Main(string[] args)
{
Console.OutputEncoding = Encoding.Unicode;
List<string> sentences = new List<string>();
sentences.Add(string.Format("אברהם"));
sentences.Add(string.Format("שורה {0}, אחרי אברהם", 2));
foreach (var sentence in sentences)
{
WriteLineRTL(sentence);
}
}
private static void WriteLineRTL(string input)
{
var chars = input.ToCharArray();
Console.CursorLeft = chars.Length;
for (int i = 0; i < chars.Length; i++)
{
Console.Write(chars[i]);
Console.CursorLeft -= 2;
}
Console.WriteLine();
}
输出:
如果除了以相反的方式 (RTL) 呈现字符串之外,您还想打印与屏幕右侧对齐的字符串,请使用:
private static void WriteLineRtl(string input)
{
Console.CursorLeft = Console.WindowWidth - input.Length;
for (int i = input.Length - 1; i >= 0; i--)
Console.Write(input[i]);
}
示例:
using static System.Console;
class Program
{
static void Main(string[] args)
{
WriteLineRtl("שלום,");
WriteLineRtl("בהמשך לשיחתנו הטלפונית,");
WriteLineRtl("רציתי להודיע שהכל בסדר.");
WriteLineRtl("שלום ולהתראות!");
Read();
}
static void WriteLineRtl(string input)
{
CursorLeft = WindowWidth - input.Length;
for (int i = input.Length - 1; i >= 0; i--)
Write(input[i]);
}
}
输出: