0

これをどうするかはまったくわかりませんが、変換しようとしているファイルのスニペットを次に示します。

"September

3Beef
Lamb Chops

4Fish
Not Fish

5Mac and Cheese
PB & J"

csv ファイルは、引用符で囲まれた後に続く日付を出力することになっているため、上記は次のようになります。

2013年9月3日火曜日 「ビーフ」「ラムチョップ」

2013 年 9 月 4 日水曜日「魚」「魚ではない」

2013年9月5日(木)「マックアンドチーズ」「PB&J」

これが私がこれまでに持っているものです:

StreamReader reader = new StreamReader(@"..\..\Lunches.txt");

while (!reader.EndOfStream)
{
    string currentLine = reader.ReadLine();
}

StreamWriter writer = new StreamWriter(@"..\..\Lunches.csv");

// date.ToString("ddddd yyyyy mm MMMMMM");
string delimiter = ",";
4

2 に答える 2

0

これは少し複雑になります。私はあなたのためにいくつかのことを省きました。

String[] months = { "January", "February", "March", ....}; 
Date processDate = new Date();
while (!reader.EndOfStream)
{
    string currentLine = reader.ReadLine();

    // skip this line if blank
    if (String.IsNullOrEmpty(currentLine)) continue;

    if (months.Contains(currentLine)) {
        // we have a new starting month.  
        // reset the process date
        Int32 month = DateTime.ParseExact(currentLine.Trim(), "MMMM", CultureInfo.CurrentCulture).Month;
        date = Convert.ToDate(month.ToString() + "/01/2013");
        continue;
    }


    // here's where the real fun begins:
    // you have to pull out the first two characters and test if one or both are digits.
    // This will give you the day.  Put that into your date variable.
    Int32 day = 0;
    char[] arr = currentLine.ToCharArray(0, currentLine.Length);
    if (Char.IsDigit(arr[1])) {
        // first two characters are numbers
        day = Convert.ToInt32(currentLine.Substring(0,2));
        currentLine = currentLine.Remove(0,2);
    } else {
        // only the first character is a number
        day = Convert.ToInt32(currentLine.Substring(0,1));
        currentLine = currentLine.Remove(0,1);
    }

    // set the new date
    date = new DateTime(date.Year, date.Month, day, 0, 0, 0);
    // If we can assume that ALL lines are broken into two parts then we can do the following:
    String secondLine = reader.ReadLine();
    currentLine = String.Format("{0} {1}", currentLine, secondLine);

    // At this point you have the month, day, and the entire line.
    // write it to your lunch stream or store in a StringBuilder 
}
于 2013-09-04T14:17:04.590 に答える