输出到文件c#
我使用Apriori算法来获得强规则。到目前为止,我已经在一个列表框中找到了它们(这个程序是在网上找到的)。但是现在我想将输出保存到txt文件中。到目前为止,我在.txt文件中得到的只是“AprioriAlgorithm.Rule”。它获得了正确的规则数,因此重复“AprioriAlgoritm.Rule”获取规则数。例如,如果我有12条强规则,我会在txt文件中获得12次AprioriAlgoritm.Rule输出到文件c#,c#,algorithm,filewriter,apriori,C#,Algorithm,Filewriter,Apriori,我使用Apriori算法来获得强规则。到目前为止,我已经在一个列表框中找到了它们(这个程序是在网上找到的)。但是现在我想将输出保存到txt文件中。到目前为止,我在.txt文件中得到的只是“AprioriAlgorithm.Rule”。它获得了正确的规则数,因此重复“AprioriAlgoritm.Rule”获取规则数。例如,如果我有12条强规则,我会在txt文件中获得12次AprioriAlgoritm.Rule namespace WPFClient { [Export(typeof(IRes
namespace WPFClient
{
[Export(typeof(IResult))]
public partial class Result : Window, IResult
{
public Result()
{
InitializeComponent();
}
public void Show(Output output)
{
FileStream fs = new FileStream("strongrules.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
this.DataContext = output;
for (int x = 0; x < output.StrongRules.Count; x++)
{
sw.WriteLine(output.StrongRules[x]);
}
this.ShowDialog();
sw.Close();
}
}
}
名称空间WPFClient
{
[导出(类型(IResult))]
公共部分类结果:窗口,IResult
{
公开结果()
{
初始化组件();
}
公共无效显示(输出)
{
FileStream fs=newfilestream(“strongrules.txt”,FileMode.Create);
StreamWriter sw=新StreamWriter(fs);
this.DataContext=输出;
对于(int x=0;x
这是输出类
namespace AprioriAlgorithm
{
using System.Collections.Generic;
public class Output
{
#region Public Properties
public IList<Rule> StrongRules { get; set; }
public IList<string> MaximalItemSets { get; set; }
public Dictionary<string, Dictionary<string, double>> ClosedItemSets { get; set; }
public ItemsDictionary FrequentItems { get; set; }
#endregion
}
}
namespace算法
{
使用System.Collections.Generic;
公共类输出
{
#区域公共财产
公共IList strong规则{get;set;}
公共IList MaximaliteMets{get;set;}
公共字典ClosedItemSets{get;set;}
公共项Dictionary FrequentItems{get;set;}
#端区
}
}
由于您要将类型为Rule
的对象而不是string
传递给WriteLine
方法,因此您必须指定确切的输出内容
为此,需要重写规则
类的ToString()
方法
public class Rule
{
public string RuleName { get; set; }
public string RuleDescription { get; set; }
public override string ToString()
{
return string.Format("{0}: {1}", RuleName, RuleDescription);
}
}
正如所说
通过调用对象上的ToString方法写入对象的文本表示形式,后跟文本字符串或流的行终止符
另一种方法(除了覆盖ToString
)是输出各个属性:
var rule = output.StringRules[x];
sw.WriteLine("{0}: {1}", rule.RuleName, rule.RuleDescription);
或者,使用C#的特性:
如果您不能或不想覆盖
ToString
这不是问题,请使用此选项。请在以“?”结尾的一句话中总结您想要的内容(您可以在后面详细说明)您也不需要使用FileStream。相反,您可以使用字符串生成器构建文本,然后使用System.IO->file.WriteAllText(outputPath,stringBuilder.ToString())中的file helper类将文本输出到文件中
@StephenPorter:为什么要创建一个StringBuilder
,然后写入文件?这样效率不会更高,如果输出非常大,可能会耗尽内存。有很多方法可以避免直接处理文件流
(例如,使用LINQ和file.writeAllines
),但StringBuilder
方法并不是一个特别好的选择。@JimMischel它总是逐案进行。使用流没有错,这只是一个选择。如果你有一个庞大的数据集,想要使用流,那就千方百计去做。我倾向于说“采用Martin Fowler方法”“这意味着,通常效率意味着不易维护的隐藏代码,而易于维护的代码通常意味着效率较低,因此,根据您试图解决的当前问题,找到两者之间的共同点。
sw.WriteLine($"{rule.RuleName}: {rule.RuleDescription}");