c# - 如何进行统计;第二:如何写这样的文件
问题描述
首先:我必须按省从我的csv(https://pastebin.com/jxNSzVYP)中进行统计。在某个地方你可以找到像“HU-GD”这样的省份,然后你必须看到像“HU”这样的前2个字母。我必须计算那里有多少个 SI/GA/etc 省。之后,我必须写出,当它至少是 3 时。(如果 csv 发生变化,我的意思是不会再有 HU/SI/ 等,并且会有一个新的,程序必须计算它。)[检查: 描述预期结果]
第二:我必须制作一个新的“newCNtunnels.csv”文件。当有一个像“HU-GD”这样的省份时,我必须将它们分开并用相同的数据写入它们,只是省份不同。[检查:描述预期结果]
我不是一个大程序员,所以请不要过度复杂化。对不起我的英语不好。这不是我的第一语言,但可能你已经注意到了。谢谢您的帮助!
我正在使用 Windows 10 和 Visual Studio。C#语言
struct datas
{
public string name;
public int length;
public string date;
public string province;
}
datas[] tunnel = new datas[99];
int i = 0;
int howmanyrow= 0;
StreamReader sr = new StreamReader("CNtunnels.csv");
sr.ReadLine();
while (!sr.EndOfStream)
{
String[] onerow= sr.ReadLine().Split(';');
tunnel[i].name= onerow[0];
tunnel[i].length= Convert.ToInt32(onerow[1]);
tunnel[i].date= onerow[2];
tunnel[i].province= onerow[3];
i++;
howmanyrow++;
}
sr.Close();
异常结果:
解决方案
请参阅以下解决方案:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
const string INPUT_CSV_FILENAME = @"c:\temp\test.csv";
const string OUTPUT_CSV_FILENAME = @"c:\temp\test1.csv";
const string OUTPUT_STATISTICS_FILENAME = @"c:\temp\statistic.txt";
static void Main(string[] args)
{
Data data = new Data(INPUT_CSV_FILENAME);
data.WriteStatistics(OUTPUT_STATISTICS_FILENAME);
data.WriteCSV(OUTPUT_CSV_FILENAME);
}
}
class Data
{
public static List<Data> datas = new List<Data>();
public string name;
public int length;
public string date;
public string province;
public Data() { }
public Data(string filename)
{
StreamReader reader = new StreamReader(filename);
string line = "";
int rowCount = 0;
while ((line = reader.ReadLine()) != null)
{
line = line.Trim();
if (line.Length > 0)
{
string[] splitArray = line.Split(new char[] { ';' });
if (++rowCount > 1)
{
string[] splitProvidence = splitArray[3].Split(new char[] { '-' });
foreach (string providence in splitProvidence)
{
Data newRow = new Data();
Data.datas.Add(newRow);
newRow.name = splitArray[0];
newRow.length = int.Parse(splitArray[1]);
newRow.date = splitArray[2];
newRow.province = providence;
}
}
}
}
}
public void WriteStatistics(string filename)
{
StreamWriter writer = new StreamWriter(filename);
var groups = datas.GroupBy(x => x.province).OrderByDescending(x => x.Count()).ToList();
foreach (var group in groups)
{
writer.WriteLine("{0} - {1}", group.Key, group.Count());
}
writer.Flush();
writer.Close();
}
public void WriteCSV(string filename)
{
StreamWriter writer = new StreamWriter(filename);
string header = string.Join(";", new string[] { "name","length","date","province"});
writer.WriteLine(header);
foreach (Data data in datas)
{
writer.WriteLine(string.Join(";",new string[] {
data.name,
data.length.ToString(),
data.date,
data.province
}));
}
writer.Flush();
writer.Close();
}
}
}
推荐阅读
- oracle - Oracle UNION 是否具有内置排序功能?
- gson - Retrofit2 和 Gson 错误:java.lang.NoSuchMethodError
- python - 多个函数调用 QTimer Mainwindow 挂起
- python - 如何重新格式化一串字符串操作并获得其结果
- angular - 如何进行单元测试以检查小吃店是否营业
- sql-server - 根据条件创建动态 SQL Select
- javascript - 反应时handleChange函数的问题
- angular - 通信 - 具有多个父组件的子组件
- python - 如何使用 Flask 将数据库记录呈现为 HTML?
- reactjs - 在“Connect(App)”的上下文中找不到“store”