2017-07-30 12 views
-1

私はC#プログラミングの初心者です。使用できるすべてのツールに圧倒されています。テキストファイルのフレーズを検索し、C#で次の単語を読む

私は多くの情報を持つテキストファイルを持っています。私は "[PRG]"フレーズを見つけ、このフレーズの直後に現れるインデックス番号を読む必要があります。下の行では、ある単語をスキップして残りの行を読む必要があります。ここで

は、テキストファイルのサンプルです:

[TYP] 1001 1
[PRG] 0
name Bulka Fitnes 1/2
image 31
...
...
...
[PRG] 12
name TOST
...

私はそれで何をすべきか、その番号へのすべての名前を割り当てることです。 File.ReadAllLinesを使用して、各行に文字列テーブルを作成することができます。
"[PRG]"フレーズを見つける方法、次の単語を読む方法、1語をスキップする方法、残りの行を読む方法がわかりません。そのように見えたし、私は、これはそのような...

string line; 

// Read the file and display it line by line. 
System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt"); 
while((line = file.ReadLine()) != null) 
{ 
    List<string> ListOfParsedValues = line.Trim().Split(' ').ToList(); 
    if (ListOfParsedValues[0] == "[PRG]") 
    { 
     string desiredValue = //ListOfParsedValues.Last() ... or whatever you want here 
    } 
} 

file.Close(); 
+0

C#の回答が必要な場合は、C++コードを投稿しないでください。また、C# –

答えて

0

同じことを達成したいと思い、C++で

私のソリューション?

static void Read() 
{ 
    string[] myFile = File.ReadAllLines(@"C:\1.txt"); 

    for(int index = 0; index < myFile.Length; index++) 
    { 
     if(myFile[index].Contains("[PRG]")) 
     {    
      Console.WriteLine(myFile[index + 1].Substring(myFile[index + 1].IndexOf(' ')).Trim()); 
     } 
    } 
} 

static void Main(string[] args) 
{ 
    Read(); 
} 

あなたは例のコードを編集することができます:読み取り機能へのファイルパスを渡す

  • を。
  • あなたは値が関数からリストをリストして返すために追加することができ、結果を示すのinstad ...

など...コンソールアプリとして書かれ

+0

で試したことを投稿してください。助けてもらえますが、エラーが表示されます: "暗黙的に 'string []'を 'System.Collections.Generic.List 'に変換できません。 ListOfParsedValuesから2番目の単語を読み込んで名前のインデックスを取得するだけなので、このファイルには最適です。次の行では、同じことをして最初の単語を削除するだけで、名前をつけることができます。 – WhiteBambo

+0

.ToList()を実行するのを忘れた –

0

何かを助けている場合、私に教えてくださいここ

void CFtp::GetNamesList(std::string nameTab[]) 
{ 
    int numberBuff; 
    wstring textBuff; 
    wstring PRG = L"PRG"; 
    wifstream file(m_localPath + "programs.prg", std::ios::binary); 
    if (file.good()) { 
     while (!file.eof()) { 
      file >> textBuff; 
      if (textBuff.find(PRG) != string::npos) { 
       file >> numberBuff; 
       file >> textBuff; 
       getline(file, textBuff); 
       textBuff.erase(0, 1); 
       textBuff.erase(textBuff.length() - 1, 1); 
       nameTab[numberBuff] = convert.to_bytes(textBuff); 
      } 
     } 
    } 
    file.close(); 
} 
+0

分割した後、私はそれに行くことができましたが、 "name"というフレーズを置き換える余裕はありません。ワード。その場合は – WhiteBambo

+0

を使用してください。myFile [index + 1] .Substring(myFile [index + 1] .IndexOf( ''))//例を変更します –

-2

、ちょうど何を表示しますあなたが必要な場合、私は次のようなことをします:

using System; 
using System.Collections.Generic; 
using System.IO; 

namespace demo 
{ 
    struct info 
    { 
     public int code; 
     public string infoWanted; 
    } 
    class Program 
    { 
     public static Dictionary<String, Type> animals; 
     static void Main(string[] args) 
     { 
      string [] lines = File.ReadAllLines(@"fullPath"); 
      List<info> myInfo = new List<info>(); 
      for (int i = 0; i < lines.Length; i++) 
      { 
       int targetCode = -1; 
       string infoWanted = ""; 
       string l = lines[i]; 
       int prg = l.IndexOf("[PRG]"); 
       if (prg > -1) 
       { 
        string subLine = l.Substring(prg + 6).Trim(); 
        int whiteSpace = subLine.IndexOf(" "); 
        if (whiteSpace > 0) 
        { 
         subLine = subLine.Substring(0, whiteSpace); 
        } 
        if (!int.TryParse(subLine, out targetCode)) 
        { 
         targetCode = -1; 
        } 
        if (targetCode > -1) 
        { 
         i++; 
         if (i == lines.Length) 
         { 
          break; 
         } 
         l = lines[i].Trim(); 
         whiteSpace = l.IndexOf(" "); 
         if (whiteSpace > 0) 
         { 
          infoWanted = l.Substring(whiteSpace + 1); 
          //do something with target code and infoWanted  
          info newInfo = new info(); 
          newInfo.code = targetCode; 
          newInfo.infoWanted = infoWanted; 
          myInfo.Add(newInfo); 
         } 
        } 
       } 
      } 
      foreach (info i in myInfo) 
      { 
       Console.WriteLine(i.code.ToString() + ": " + i.infoWanted); 
      } 
      Console.ReadKey(); 
     } 
    } 
} 

リオンの答えの置換は危険です。最初に、無視される最初の単語は常に「名前」(真実かもしれません)と仮定しますが、2番目に重要なことに、Replaceはその行のすべての出現を削除します。安全に遊び、最初の空白を探し、その後すべてを取る方がよい。また、私の解決策では、 "[PRG]"は行の最初の部分ではありません。

関連する問題