2016-04-24 5 views
1

Ich bin sehr neu in C# und ich habe Probleme zu versuchen, dies zu verstehen. Wie übergebe ich einen Parameter an (oder tendiere ich dazu, die Terminologie zu verwirren) die Hauptfunktion, um eine Textdatei zu lesen? Ich habe eine Python-Funktion, die besser zeigt, was ich tun möchte.Wie übergeben Parameter zum Öffnen von Dateien C#

def readFile(filename): 
    data = [] 
    source = file(filename) 
    for line in source: 
     words = line.split() 
     for word in words: 
      data.append(int(word)) 
    source.close() 
    return data 

Ich habe ein grundlegendes Verständnis davon, wie Dateien in C# zu öffnen, aber die Web-Scheuern ich nichts finden kann, die mir helfen können, was ich will oder zumindest helfen, zu übersetzen. hier ist mein Grundverständnis:

using System; 
using System.Text; 
using System.IO; 

public class Readingfiles { 


public static void Main() 
{ 
    StreamReader src = new StreamReader("Data.txt"); 

    while(!src.EndOfStream) 
    { 
     string line = src.ReadLine(); 
     Console.WriteLine(line); 
    } 

    } 
} 

Bitte helfen Sie, wenn es hilft, Im erhabenen Text mit und auf dem Terminal durch mcs/Mono zu kompilieren.

+0

Sie sollen für Ihre Eingabe Argumente 'Main' ->' args [] ' – Ian

Antwort

2

Sie sollten Eingabeargument args für Ihre main() haben:

static void Main(string[] args) 

Als Beispiel:

class Program { 
    static void Main(string[] args) { 
     Console.WriteLine("This is the program"); 
     if (args == null || args.Length == 0) { 
      Console.WriteLine("This has no argument"); 
      Console.ReadKey(); 
      return; 
     } 
     Console.WriteLine("This has {0} arguments, the arguments are: ", args.Length); 
     for (int i = 0; i < args.Length; ++i) 
      Console.WriteLine(args[i]); 
     Console.ReadKey(); 
    } 
} 

Das Programm zeigt Ihnen, ob Sie die .exe mit dem Argument nennen oder nicht:

C:\Release> ConsoleApplication.exe //has no argument 
C:\Release> ConsoleApplication.exe Data.txt //has one argument 
C:\Release> ConsoleApplication.exe CallWith Data.txt //has two arguments 
C:\Release> ConsoleApplication.exe "CallWith Data.txt" //has ONE arguments 

In Ihrem Fall wahrscheinlich die Argument ist nur eine einzelne Zeichenfolge, also die Überprüfung der Eingabe setzt auf args[0] wird genug:

public static void Main(string[] args) 
{ 
    if (args == null || args.Length == 0) { 
     Console.WriteLine("Error: please specify the file to read!"); 
     Console.ReadKey(); 
     return; 
    } 

    try { 

     StreamReader src = new StreamReader(args[0]); 

     while(!src.EndOfStream) 
     { 
      string line = src.ReadLine(); 
      Console.WriteLine(line); 
     } 
    } catch (Exception ex) { 
     Console.WriteLine("Error while reading the file! " + ex.ToString()); 
    } 

    Console.ReadKey();  
} 

Edit:

Ihre endgültige Lösung soll wie folgt aussehen (einfach gesagt den Hauptblock auf den richtigen die usings Namespace und Klasse) und Sie sollten verwenden alle:

using System; 
using System.IO; 

namespace ConsoleApplication2 { 
    class Program { 
     public static void Main(string[] args) { 
      if (args == null || args.Length == 0) { 
       Console.WriteLine("Error: please specify the file to read!"); 
       Console.ReadKey(); 
       return; 
      } 

      try { 

       StreamReader src = new StreamReader(args[0]); 

       while (!src.EndOfStream) { 
        string line = src.ReadLine(); 
        Console.WriteLine(line); 
       } 
      } catch (Exception ex) { 
       Console.WriteLine("Error while reading the file! " + ex.ToString()); 
      } 

      Console.ReadKey(); 
     } 
    } 
} 
+0

das ist gut und ich denke, Das ist genau das, was ich brauche, aber die Funktion zum Öffnen der Textdatei muss dann die Informationen in der Textdatei für andere Funktionen in einer Klasse verwenden, wenn ich die Textöffnungsdatei in main anrufe, wird es auf die gleiche Weise vervollständigt ? – user1712507

+0

Wenn Sie die Informationen für andere Funktionen speichern müssen, empfehle ich Ihnen zwei weitere Dinge: (1) Erstellen Sie eine "Liste Texte" oder "string [] Texte", um die Texte in Ihrer Eingabedatei zu erhalten und die 'Texte' zu ​​verwenden in allen anderen Funktionen. (2) Setze eine unendliche while-Schleife in deine Hauptfunktion ('while (true)'), so dass sie nicht geschlossen wird, bevor du 'Application Exit' spezifizierst. – Ian

+0

Also kopierte ich dein zweites Beispiel und es hieß" Unerwartetes Symbol " -of-file "" aber das Dateiende ist nicht in Ihrem Code. – user1712507

1

Sie Befehlszeilenargumente von jedem Ort des Programms acces kann mit

string[] args = Environment.GetCommandLineArgs(); 

Auch der einfachste Weg, um alle Zeilen in der Datei zu lesen ist

if (args.Length > 1) //the 1st is always the path to app 
    string[] lines = System.IO.File.ReadAllLines(ards[1]); 
Verwandte Themen