C# 文件输出打印超过 1 次
C# file output prints more than 1 time
我有这个代码:
Class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CTesteM7
{
internal class Borboletas
{
public string nomeAmigo { set; get; }
public string nomeEspecie { set; get; }
public int envergadura { set; get; }
public int b { set; get; }
public string classificacao { set; get; }
public int quantidade { set; get; }
public string pathInput { set; get; }
public string pathOutput { set; get; }
}
}
主要:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace CTesteM7
{
internal class Program
{
static void Main(string[] args)
{
//Lista / Classe
List<Borboletas> borboletas = new List<Borboletas>();
Borboletas dados = new Borboletas();
//Pedir ao utilizador o ficheiro de input
Console.Write("Nome do ficheiro de input: ");
dados.pathInput = Console.ReadLine();
//Verificar se o ficheiro existe
if (File.Exists(dados.pathInput))
{
//Ler o ficheiro
StreamReader srf = new StreamReader(dados.pathInput);
while (!srf.EndOfStream)
{
// Buscar a linha do numero ou seja q n contem ;
var linha = srf.ReadLine();
if (!linha.Contains(';'))
{
dados.b = int.Parse(linha);
}
else
{
string[] strArray;
strArray = linha.Split(';');
dados.nomeEspecie = strArray[1];
dados.envergadura = Convert.ToInt32(strArray[2]);
borboletas.Add(dados);
//Ficheiro de output
dados.pathOutput = @"Output.txt";
StreamWriter swo = new StreamWriter(dados.pathOutput, append: true);
swo.WriteLine(dados.b);
//Verificações da classificação das borboletas e escrever para o ficheiro
if (dados.envergadura >= 0 && dados.envergadura <= 50)
{
dados.classificacao = "Pequena";
swo.WriteLine(dados.nomeEspecie + ":" + dados.classificacao);
}
else if (dados.envergadura >= 51 && dados.envergadura < 70)
{
dados.classificacao = "Grande";
swo.WriteLine(dados.nomeEspecie + ":" + dados.classificacao);
}
else if (dados.envergadura >= 70)
{
dados.classificacao = "Gigante";
swo.Write(dados.nomeEspecie + ":" + dados.classificacao);
}
else
{
Console.WriteLine("Erro");
}
swo.Close();
}
}
//Confirmação
Console.WriteLine("\nOperação realizada com sucesso");
Console.ReadKey();
//Fechar os ficheiros
srf.Close();
//Adicionar os dados na lista
borboletas.Add(dados);
}
else
{
//Caso o ficheiro não exista mostrar erro
Console.WriteLine("O ficheiro pedido não existe, insira um nome válido\n");
}
}
}
}
我想将文件中的数据打印到输出文件,但是变量 dados.b(它的数字 3)打印 3 次到输出文件,每次我 运行 它每次添加的程序新文本,但我不想让文本自己重复,output file image
有人知道问题出在哪里吗?谢谢
swo.WriteLine(dados.b);
它在while循环中,所以你会执行3次,你可以添加一个带有计数的标志来只执行一次或者从while循环中取出来!
我有这个代码: Class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CTesteM7
{
internal class Borboletas
{
public string nomeAmigo { set; get; }
public string nomeEspecie { set; get; }
public int envergadura { set; get; }
public int b { set; get; }
public string classificacao { set; get; }
public int quantidade { set; get; }
public string pathInput { set; get; }
public string pathOutput { set; get; }
}
}
主要:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace CTesteM7
{
internal class Program
{
static void Main(string[] args)
{
//Lista / Classe
List<Borboletas> borboletas = new List<Borboletas>();
Borboletas dados = new Borboletas();
//Pedir ao utilizador o ficheiro de input
Console.Write("Nome do ficheiro de input: ");
dados.pathInput = Console.ReadLine();
//Verificar se o ficheiro existe
if (File.Exists(dados.pathInput))
{
//Ler o ficheiro
StreamReader srf = new StreamReader(dados.pathInput);
while (!srf.EndOfStream)
{
// Buscar a linha do numero ou seja q n contem ;
var linha = srf.ReadLine();
if (!linha.Contains(';'))
{
dados.b = int.Parse(linha);
}
else
{
string[] strArray;
strArray = linha.Split(';');
dados.nomeEspecie = strArray[1];
dados.envergadura = Convert.ToInt32(strArray[2]);
borboletas.Add(dados);
//Ficheiro de output
dados.pathOutput = @"Output.txt";
StreamWriter swo = new StreamWriter(dados.pathOutput, append: true);
swo.WriteLine(dados.b);
//Verificações da classificação das borboletas e escrever para o ficheiro
if (dados.envergadura >= 0 && dados.envergadura <= 50)
{
dados.classificacao = "Pequena";
swo.WriteLine(dados.nomeEspecie + ":" + dados.classificacao);
}
else if (dados.envergadura >= 51 && dados.envergadura < 70)
{
dados.classificacao = "Grande";
swo.WriteLine(dados.nomeEspecie + ":" + dados.classificacao);
}
else if (dados.envergadura >= 70)
{
dados.classificacao = "Gigante";
swo.Write(dados.nomeEspecie + ":" + dados.classificacao);
}
else
{
Console.WriteLine("Erro");
}
swo.Close();
}
}
//Confirmação
Console.WriteLine("\nOperação realizada com sucesso");
Console.ReadKey();
//Fechar os ficheiros
srf.Close();
//Adicionar os dados na lista
borboletas.Add(dados);
}
else
{
//Caso o ficheiro não exista mostrar erro
Console.WriteLine("O ficheiro pedido não existe, insira um nome válido\n");
}
}
}
}
我想将文件中的数据打印到输出文件,但是变量 dados.b(它的数字 3)打印 3 次到输出文件,每次我 运行 它每次添加的程序新文本,但我不想让文本自己重复,output file image
有人知道问题出在哪里吗?谢谢
swo.WriteLine(dados.b);
它在while循环中,所以你会执行3次,你可以添加一个带有计数的标志来只执行一次或者从while循环中取出来!