2015-12-01 4 views
1

Я читаю файлы в DataTables, но мне нужно использовать разные имена файлов для другой версии моего продукта. Как я могу получить номер версии продукта, введенный пользователем в качестве глобальной переменной в классе?Чтение пользовательского ввода в глобальную строку C#

Я хочу применить оператор case к строке «using (TextFieldParser)», чтобы он использовал правильные файлы для правильных версий.

static public DataTable VolumeImport() 
{ 
    DataTable Volumes = new DataTable(); 
    Volumes.Columns.Add("MediaId", typeof(string)); 
    Volumes.Columns.Add("MediaTypeName", typeof(string)); 
    Volumes.Columns.Add("MediaGroupName", typeof(string)); 
    Volumes.Columns.Add("Barcode", typeof(string)); 
    Volumes.Columns.Add("PoolName", typeof(string)); 

    using (TextFieldParser volumes = new TextFieldParser("C:\\Input Files\\752.dat")) 

    { 
     volumes.TextFieldType = FieldType.Delimited; 
     volumes.Delimiters = new string[] { "," }; 
     volumes.HasFieldsEnclosedInQuotes = true; 
     volumes.TrimWhiteSpace = true; 


     string[] deviceprops; 

     while (!volumes.EndOfData) 
     { 
      deviceprops = volumes.ReadFields(); 
      Volumes.Rows.Add((deviceprops[3]).Replace("'", String.Empty), (deviceprops[7]).Replace("'", String.Empty), (deviceprops[8]).Replace("'", String.Empty), 
      (deviceprops[16]).Replace("'", String.Empty), (deviceprops[50]).Replace("'", String.Empty)); 
     } 
    } 
    return Volumes; 
} 

Я добавлю следующее, но оно никогда не запрашивает версию. Я подозреваю, что это потому, что его не входит в пустоте Main

public class Version 
{ 
    public string nbuversion { get; set; } 

    public void GetVersion() 
    { 
     Console.WriteLine("Enter the Version:"); // Prompt for version 
     string nbuversion = Console.ReadLine(); 
    } 
} 

Update: Я удалось решить эту проблему на основе ниже посоветуйте. Большое спасибо.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Microsoft.VisualBasic.FileIO; 
using System.IO; 
using System.Xml; 
using System.Data; 

public class DataCollect 
{ 
    static public Dictionary<int, string> Day_Lookup = new Dictionary<int, string>(); 
    public string nbuversion { get; set; } 
    public string filename { get; set; } 

    class NBUXMLWriter 
    { 
     static public void Main(string[] args) 
     { 

      DataCollect s = new DataCollect(); 
      s.GetVersion(); 
      s.SetFileLocations(); 
      s.DayImport(); 
     } 
    } 
    public void GetVersion() 
    { 
     Console.WriteLine("Enter the Version:"); 
     nbuversion = Console.ReadLine(); 
    } 

    public void SetFileLocations() 
    { 
     switch (nbuversion) 
     { 
      case "7.6": 
       filename = "input1.txt"; 
       break; 
      case "7.7": 
       filename = "input2.txt"; 
       break; 
     } 
    } 

    public void DayImport() 
    { 

     string filepath = "C:\\Input Files\\Static\\"; 

     using (TextFieldParser daysofweek = new TextFieldParser((filepath)+(filename))) 

     { 
      daysofweek.TextFieldType = FieldType.Delimited; 
      daysofweek.Delimiters = new string[] { " " }; 
      daysofweek.HasFieldsEnclosedInQuotes = true; 
      daysofweek.TrimWhiteSpace = true; 


      string[] dayprops; 

      while (!daysofweek.EndOfData) 
      { 
       dayprops = daysofweek.ReadFields(); 
       int daynumber; 
       bool daynumberparsed = Int32.TryParse((dayprops[0]), out daynumber); 
       string dayname = dayprops[1]; 
       Day_Lookup.Add((daynumber), (dayname)); 
      } 

     } 
     Console.WriteLine("Day is" + Day_Lookup[(4)]); 
     Console.ReadKey(); 

    } 
} 
+0

, где вы создали объект для класса 'Version', и где это метод.' GetVersion() ' –

+0

« Я подозреваю, что это связано с тем, что он не является частью Main Void ». хмм. никогда не слышал, что все действия консоли должны быть частью метода Main. Является ли метод GetVersion() ссылкой где-нибудь? Действительно ли это вызвано/выполнено? Действительно ли ваше приложение составлено в консольном приложении? Здесь много возможностей. Время для некоторой отладки ... –

ответ

0

Делать это Readline в локальной переменной в пределах GetVersion() метода:

public void GetVersion() 
{ 
    Console.WriteLine("Enter the Version:"); 
    string nbuversion = Console.ReadLine(); 
} 

ли это писать Version.nbuversion собственности:

public string nbuversion { get; set; } //readline into "Global" property here 
public void GetVersion() 
{ 
    Console.WriteLine("Enter the Version:"); 
    nbuversion = Console.ReadLine(); //remove "string" 
} 

Этот пример кода должен быть достаточно начните работу

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Version v = new Version(); 
      v.GetVersion(); 

      //do stuff with nbuversion - 1st way 
      Console.WriteLine("1:" + v.nbuversion); 

      //do stuff with nbuversion - 2nd way 
      v.VolumeImport(); 
     } 
    } 

    public class Version 
    { 
     public string nbuversion { get; set; } 

     public void GetVersion() 
     { 
      Console.WriteLine("Enter the Version:"); 
      //string nbuversion = Console.ReadLine(); <- this will Readline into local variable - WRONG 
      nbuversion = Console.ReadLine(); 
     } 

     public DataTable VolumeImport() 
     { 
      Console.WriteLine("2:" + nbuversion); 
      //do stuff with nbuversion 
      ... 
     } 
    } 
} 
+0

Большое спасибо, это прекрасно, и это позволило мне разобраться, как передать переменные из одного в другой класс. Я добавлю то, что я пришел в оригинальном посте, если возможно –

+0

Рад помочь :) – interceptwind

Смежные вопросы