我有一个名为info.txt的文本文件,其中包含字符串。
info.txt
05331
02555
03211
05222
04321
02387
03444
03127
05117
03680
03881
01579
03111
我的输出应该是new.txt
输出new.txt
05331
02555
03211
1
05222
04321
02387
03444
03127
2
05117
03680
03881
01579
03111
3
基本上我应该得到以“03”开头的所有字符串的计数,并在子字符串“01”之前打印计数
try
{
String line;
Int counter =0;
StreamReader sr = new StreamReader("C:\\Files\\gamenam.txt");
StreamWriter sw = new StreamWriter("C:\\Files\\gamenam_1.txt");
while ((line = sr.ReadLine())!= null)
{
if (line.substring(0,2) == "05")
{
sw.Write(counter.ToString());
counter =0;
}
If (line.subString(0,2) =="03")
{
//loop
counter++;
}
sw.WriteLine(line);
}
sr.Close();
sw.Close();
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
finally
{
Console.WriteLine("Exception finally block.");
}
}
写完我的代码后,我才能得到。
0
05331
02555
03211
1
05222
04321
02387
03444
03127
2
05117
03680
03881
01579
03111
第一行的0不应该是因为我之前没有蜇,并且没有最后一次计数。
请帮帮我们。
答案 0 :(得分:2)
而不是你的while loop
你可以尝试类似的东西:
...
Boolean isFirstLine = true;
while ((line = sr.ReadLine()) != null) {
// If line starts with "05" we should print out counter
// (that is number of "03" started lines)
// unless it is the first line in the file
if (line.StartsWith("05")) {
if (!isFirstLine)
sw.WriteLine(counter.ToString());
sw.WriteLine(line);
counter = 0;
isFirstLine = false;
continue;
}
sw.WriteLine(line);
if (line.StartsWith("03"))
counter += 1;
// We should also print out counter after the last file line
// if, say, counter > 0
if (sr.Peek() < 0) // <- No next line
if (counter > 0)
sw.WriteLine(counter.ToString());
isFirstLine = false;
}
...
答案 1 :(得分:1)
此处使用READ AHEAD实现的代码。在循环结束之前,您将读取下一行,如果它为null(文件结尾)或者以&#34; 05&#34;然后你输出并重置计数器
try
{
int counter = 0;
//Pass the file path and name to the StreamReader constructer
StreamReader sr = new StreamReader("gamenam.txt");
//Pass the file path and name to the StreamReader constructer
StreamWriter sw = new StreamWriter("gamenam_1.txt");
string line = sr.ReadLine();
while (line != null)
{
if (line.Substring(0, 2) == "03")
{
counter++;
}
sw.WriteLine(line);
line = sr.ReadLine();
if ((line == null) || (line.StartsWith("05")))
{
sw.WriteLine(counter.ToString());
counter = 0;
}
}
//Close
sr.Close();
sw.Close();
}
//Catching exception
catch (Exception e)
{
//Exception Message
Console.WriteLine("Exception: " + e.Message);
}
}
finally
{
Console.WriteLine("Exception finally block.");
}
答案 2 :(得分:0)
感谢所有你帮助的人,从你输入的所有内容中,我终于得到了我需要的输出。
我写了这样的代码
String line;
int counter = 0;
Boolean isFirstLine = true;
try
{
StreamReader sr = new StreamReader("C:\\Files\\gamenam.txt");
StreamWriter sw = new StreamWriter("C:\\Files\\gamenam_1.txt");
while ((line = sr.ReadLine()) != null)
{
if (line.Substring(0, 2) == "01")
{
if (!isFirstLine)
{
sw.WriteLine(counter.ToString());
counter = 0;
}
}
if (line.Substring(0, 2) == "05")
{
counter++;
}
sw.WriteLine(line);
if (sr.Peek() < 0)
{
sw.Write(counter.ToString());
}
isFirstLine = false;
}
sr.Close();
sw.Close();
}