2013-04-26 85 views
-3

我发布了一次,似乎无法找到一个简单的方法来转换此。我试图摆脱这种方法的2维数组,ExtractData并使用列表替换它,但没有运气。你们能否给我一些我可以脱离的例子或想法?谢谢。如何将2维数组中的代码转换为列表?

private void ExtractData(DateTime dtmDay) 
    { 
    // set to selected date in MonthCalendar control 
    int intChosenDay = dtmDay.Day; 
    int intFileDay; // day of event from file 
    int intLineNumbers; // counts lines to skip 

    m_intNumberOfEvents = 0; // set number of events to 0 

    // initialize StreamReader to read lines from file 
    StreamReader objInput = 
     new StreamReader("calendar.txt"); 

    // read first line before entering loop 
    string strLine = objInput.ReadLine(); 

    // loop through lines in file 
    while (objInput.Peek() > -1 && 
     m_intNumberOfEvents < 10) 
    { 
     intFileDay = Int32.Parse(strLine); // extract day 

     // if event scheduled for specified day, 
     // store information 
     if (intFileDay == intChosenDay) 
     { 
      m_strData[ m_intNumberOfEvents, 0 ] = strLine; 
      m_strData[ m_intNumberOfEvents, 1 ] = 
       objInput.ReadLine(); 
      m_strData[ m_intNumberOfEvents, 2 ] = 
       objInput.ReadLine(); 
      m_strData[ m_intNumberOfEvents, 3 ] = 
       objInput.ReadLine(); 
      m_strData[ m_intNumberOfEvents, 4 ] = 
       objInput.ReadLine(); 
      m_intNumberOfEvents++; 
     } 
     else 
     { 
      // skip to next event in file 
      for (intLineNumbers = 0; intLineNumbers <= 3; 
       intLineNumbers++) 
       strLine = objInput.ReadLine(); 
     } 

     // read day of next event in file 
     strLine = objInput.ReadLine(); 

    } // end while 

    } // end method ExtractData 
+2

写功能,一次解决一件事。 – 2013-04-26 21:40:25

+0

'我试图摆脱这种方法的2维数组,ExtractData并使用列表替换它'你的2-dim数组是怎么样的?什么是你的文件中的数据?你想要提取哪些数据?你的输出清单应该如何? – I4V 2013-04-26 21:51:27

回答

1

所以,你有一个可变数目的事件,每个事件有5个,你想单独存储文本的“行”?创建一个类来表示每个事件数据,并创建它们的列表。

public class EventData { 
    public string Line1 { get; set; } 
    public string Line2 { get; set; } 
    public string Line3 { get; set; } 
    public string Line4 { get; set; } 
    public string Line5 { get; set; } 
} 

... 

var results = new List<EventData>(); 

// loop through lines in file 
while (objInput.Peek() > -1 && 
    m_intNumberOfEvents < 10) 
{ 
    intFileDay = Int32.Parse(strLine); // extract day 

    // if event scheduled for specified day, 
    // store information 
    if (intFileDay == intChosenDay) 
    { 
     var foo = new EventData(); 

     foo.Line1 = strLine; 
     foo.Line2 = objInput.ReadLine(); 
     foo.Line3 = objInput.ReadLine(); 
     foo.Line4 = objInput.ReadLine(); 
     foo.Line5 = objInput.ReadLine(); 

     results.Add(foo); 

     m_intNumberOfEvents++; 
    } 
    else 
    { 
     // skip to next event in file 
     for (intLineNumbers = 0; intLineNumbers <= 3; 
      intLineNumbers++) 
      strLine = objInput.ReadLine(); 
    } 

    // read day of next event in file 
    strLine = objInput.ReadLine(); 

} // end while 
+0

哇,就像那样...如果你看看我以前的帖子。你可以看到我挣扎了多少。谢谢你的帮助Dylan。 – Jae 2013-04-26 21:54:25

0

必须重复Dylan Smith所说的;上课。

我不完全确定你要做什么,但看起来你想要一系列每天都会发生的事件。如果是这样,那么一个班级确实最有意义。该类不仅会存储这些字符串,还可以拥有越来越容易管理的数据(比如说事件发生的时间)。

真的,如果你看到自己陷入了这样一个问题,你不仅需要一个变量来存储某些关于某事的信息,还需要创建一个类或一个结构体。你稍后会感谢你。

0

我看到在这种情况下定义一个新类没有意义。所有的字段都是字符串,并且在类中没有方法或属性。它只是一串字符串。使用:

var results = new List<string[]>(); 
... 
var lines = new string[5]; 

lines[0] = strLine; 
lines[1] = objInput.ReadLine(); 
lines[2] = objInput.ReadLine(); 
lines[3] = objInput.ReadLine(); 
lines[4] = objInput.ReadLine(); 

results.Add(lines); 
相关问题