2017-01-15 5 views
0

Ich habe eine Reihe von Textdateien, die alle den gleichen Inhalt Format folgen:erstellen Liste von Arrays aus Textdatei in C#

"Title section","Version of the app" 
10 
"<thing 1>","<thing 2>","<thing 3>","<thing 4>","<thing 5>","<thing 6>","<thing 7>","<thing 8>","<thing 9>","<thing 10>" 

'Where: 
' first line never changes, it always contains exactly these 2 items 
' second line is a count of how many "line 3s" there are 
' line 3 contains a command to execute and (up to) 9 parameters 
'  - there will always be 10 qoute-delimited entries, even if some are blank 
'  - there can be N number of entries (in this example, there will be 10 commands to read) 

Ich bin jedes dieser Textdateien in das Lesen, mit Stream und wollen setze jede Datei in ihrer eigenen Klasse auf.

public class MyTextFile{ 
    public string[] HeaderLine { get; set; } 
    public int ItemCount { get; set; } 
    List<MyCommandLine> Commands { get; set;} 
} 

public class MyCommandLine{ 
    public string[] MyCommand { get; set; } 
} 

private void btnGetMyFilesiles_Click(object sender, EventArgs e){ 
    DirectoryInfo myFolder = new DirectoryInfo(@"C:\FileSpot"); 

    FileInfo[] myfiles = myfolder.GetFiles("*.ses"); 

    string line = ""; 
    foreach(FileInfo file in Files){ 
     str = str + ", " + file.Name; 

     // Read the file and display it line by line. 
     System.IO.StreamReader readingFile = new System.IO.StreamReader(file.Name); 
     MyTextFile myFileObject = new MyTextFile() 

     while ((line = readingFile.ReadLine()) != null){ 
      ' create the new MyTextFile here 
     } 
     file.Close(); 
     } 
    } 
} 

Das Ziel ist, zu bestimmen, was der tatsächliche Befehl aufgerufen wird, ist („“), und, wenn eine der übrigen Parameter zu einer vorbestehenden Datei zeigen, zu bestimmen, ob die Datei existiert. Mein Problem ist, dass ich nicht herausfinden kann, wie man die N-Nummer von "Zeile 3" in ihre eigenen Objekte liest und diese Objekte an das MyTextFile-Objekt anfügt. Ich bin zu 99% sicher, dass ich mich beim Lesen jeder Datei von Linie zu Linie verlaufen habe, aber ich weiß nicht, wie ich daraus herauskommen soll.

Antwort

1

Also, das spezifische Problem von N Anzahl der Zeile 3 Elemente in Ihre Klasse zu bekommen, könnten Sie so etwas tun (natürlich können Sie einige Änderungen vornehmen, so dass es spezifischer für Ihre Anwendung ist).

public class MyTextFile 
{ 
    public List<Array> Commands = new List<Array>(); 

    public void EnumerateCommands() 
    { 
     for (int i = 0; i < Commands.Count; i++) 
     { 
      foreach (var c in Commands[i]) 
       Console.Write(c + " "); 
      Console.WriteLine(); 
     } 
    } 
} 


class Program 
{ 
    static void Main(string[] args) 
    { 
     string line = ""; 
     int count = 0; 
     MyTextFile tf = new MyTextFile(); 
     using (StreamReader sr = new StreamReader(@"path")) 
     { 
      while ((line = sr.ReadLine()) != null) 
      { 
       count += 1; 

       if (count >= 3) 
       { 
        object[] Arguments = line.Split(','); 
        tf.Commands.Add(Arguments); 
       } 
      } 
     } 
     tf.EnumerateCommands(); 
     Console.ReadLine(); 
    } 
} 

Spätestens jetzt haben Sie eine Liste der Befehle in Ihrer ‚MyTextFile‘ Klasse, die Sie aufzählen durch und mit Sachen zu tun.

** Ich habe die EnumerateCommands-Methode hinzugefügt, sodass Sie tatsächlich sehen können, dass die Liste die Werbebuchungen speichert. Der Code sollte in einer Konsolenanwendung mit den entsprechenden 'using'-Anweisungen ausgeführt werden.

Hoffe, das hilft.

+0

Genau das, was ich gesucht habe. Es überrascht mich weiterhin, wie die einfachen Lösungen die am häufigsten übersehenen sind. Vielen Dank. – Kulstad

0

Wenn alle die mit Koma Zeichen getrennt ist , kann man nur so etwas wie tun:

int length = Convert.ToInt32 (reader.ReadLine()); string line = reader.ReadLine(); IEnumerable <string> things = line.Split (',').Select (thing => thing. Replace ('\"'', string.Empty).Take(length);

Take gibt an, wie viele things aus der Leitung zu nehmen.

Verwandte Themen