【发布时间】:2017-08-18 10:44:58
【问题描述】:
我正在创建一个 CSV 文件,我正在使用 C# 和 CsvHelper 来执行此操作。
我的 CSV 文件每次都会有 205 行。我确定它应该创建 240 个条目,这正是我想要的。
似乎在 205 行处停止创建 CSV 文件。多次运行它会产生相同的 205 条目的结果。有趣的是,它尝试写入的最后一个字段是一个短字母,我不知道为什么。
以下是完整代码。
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using CsvHelper;
using System.IO;
namespace PinGenerator
{
class Program
{
static void Main(string[] args)
{
GeneratePins generatePins = new GeneratePins();
generatePins.Start();
Console.ReadLine();
}
}
public class GeneratePins
{
private Dictionary<string, String> pinNumbers = new Dictionary<string, String>();
private List<String> duplicatePinCheck = new List<string>();
private Random random = new Random();
// Runs the sequence for the generation of TimeSpans & Pin Numbers.
// Stores these into JSON / CSV Files
public void Start()
{
TimeSpan timeSpan = new TimeSpan();
TimeSpan maxTime = TimeSpan.FromHours(2);
TimeSpan currentTimeSpan = TimeSpan.FromSeconds(30);
string currentPin = "0000";
// CSV File Creation
TextWriter textWriter = File.CreateText(@"pinNumber.csv");
var csv = new CsvWriter(textWriter);
while (timeSpan.Duration() < maxTime.Duration())
{
// Create TimeSpan & Pin
timeSpan = timeSpan.Add(currentTimeSpan);
currentPin = RandomNumber();
// Duplicate Check
while (duplicatePinCheck.Contains(currentPin))
{
currentPin = RandomNumber();
}
duplicatePinCheck.Add(currentPin);
// Cache Results
string entryPinNumber = currentPin;
string entryTimeSpan = timeSpan.ToString();
// JSON
pinNumbers.Add(entryTimeSpan, currentPin);
// CSV Creation - Write to CSV File
csv.WriteField(entryTimeSpan);
csv.WriteField(entryPinNumber);
csv.NextRecord();
// CONSOLE
Console.WriteLine(entryPinNumber + " / " + timeSpan.ToString());
}
string json = JsonConvert.SerializeObject(pinNumbers, Formatting.Indented);
// Write to JSON File
using (System.IO.StreamWriter file = File.CreateText(@"pinNumbers.json"))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, pinNumbers);
}
Console.WriteLine("Created " + pinNumbers.Count() + " pin numbers.");
}
public string RandomNumber()
{
String result = random.Next(0, 9999).ToString();
result = result.PadLeft(4, '0');
return result;
}
}
}
【问题讨论】:
-
请不要在元评论中编辑关于对您的问题的反对意见。它不仅被认为是噪音,我可以向您保证它只会导致更多的反对意见。就建设性的技术批评而言,我看到的一个问题是您包含了您的完整代码,而不是minimal reproducible example。有些人可能会认为这是值得一票的,因为它使回答对他们来说有更多的工作。否则,这在我看来相当合理。 2个downvotes真的不是很多。这可以通过问一个专家认为不是特别有趣的问题来解释。
-
好的,谢谢科迪·加里。作为记录,我确实更喜欢提供更小的 sn-ps 代码,我很高兴将其缩减。通常我会被要求提供更多,我想它知道余额是多少。
标签: c# csv export-to-csv csvhelper