我需要你的帮助!我正在编写一个脚本,从一个文本文件中获取字符串,该文件从文本文件中获取20个字符的值。
现在我想在文本文件中抓取的字符前面添加空格。但是,我想将它应用于整个文本文件。
例如:
文字1 A(输入):
01253654758965475896N12345
012536547589654758960011223325
(输出):
(added 10 spaces in front)01253654758965475896 N12345
(added 10 spaces in front)01253654758965475896 0011223325
想法是循环使用它们,我在前面添加了10个空格,然后在01253654758965475896之后添加了空格。
这是我的代码:
class Program
{
[STAThread]
static void Main(string[] args)
{
int acc = 1;
string calcted = (acc++).ToString().PadLeft(20, '0');
string ft_space = new string(' ', 12);
string path = Console.ReadLine();
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadToEnd()) != null)
{
string px = s;
string cnd = s.Substring(0, 16);
string cdr = cnd;
px = ft_space + cdr;
Console.Write("Enter Location:");
string pt1 = Console.ReadLine();
if (!File.Exists(pt1))
{
using (TextWriter sw = File.CreateText(pt1))
{
sw.Write(px);
}
}
} Console.ReadKey();
}
}
}
}
答案 0 :(得分:2)
如评论中所述,首先将ReadToEnd
更改为ReadLine
。
ReadToEnd
将读取所有文件,ReadLine
将在每次循环迭代时读取一行。
然后,由于您需要20个字符而不是16个字符,因此需要将s.Substring(0, 16)
更改为s.Substring(0, 20)
。
之后你需要获得该行的其余部分,因此这将是s.Substring(20)
。
然后您需要将所有部分连接在一起,如下所示:
string result = spaces10 + first_part + spaces3 + second_part;
另一个问题是你只需要编写第一行,因为每次在循环中检查文件是否存在,如果文件存在,则不写行。
以下是您的代码将如何处理此类更改(以及其他更改):
string spaces10 = new string(' ', 10);
string spaces3 = new string(' ', 3);
string input_file = Console.ReadLine();
Console.Write("Enter Location:");
string output_file = Console.ReadLine();
using (StreamReader sr = File.OpenText(input_file))
{
using (TextWriter sw = File.CreateText(output_file))
{
string line;
while ((line = sr.ReadLine()) != null)
{
string first_part = line.Substring(0, 20);
string second_part = line.Substring(20);
string result = spaces10 + first_part + spaces3 + second_part;
sw.WriteLine(result);
}
}
}
Console.ReadKey();