4

温度データを含むファイルがあります。そこから温度を抽出し、温度のみの結果を新しいファイルに保存する必要があります。

これはファイルの内容です:

BCAST:000D6F00017620E9, 02=34.23
BCAST:000D6F00017620E9, 02=12.3
BCAST:000D6F00017620E9, 02=54.01
BCAST:000D6F00017620E9, 02=12.34
BCAST:000D6F00017620E9, 02=16.22

すべての後にデータを抽出する必要があります=すなわち34.23,12.3,54.01など

サブ文字列を使用してみましたが、ファイルを文字列として読み取るときに使用でき、最初の行のサブ文字列を作成するだけで、残りは同じままです。以下は私のコードです。提案してください!

string temp2 = System.IO.File.ReadAllText(@"C:********\temperature.txt");
int c = temp2.IndexOf("=");
string temp3 = temp2.Substring(c + 1);
System.IO.File.WriteAllText(@"C:\*******\temperature2.txt",temp3);

このコードの出力は次のとおりです。

34.23
BCAST:000D6F00017620E9, 02=12
BCAST:000D6F00017620E9, 02=54
BCAST:000D6F00017620E9, 02=12
BCAST:000D6F00017620E9, 02=16
4

4 に答える 4

6

ReadAllTextファイル全体を1つの文字列として返します。行の配列をループし、各行でサブストリングコードを使用する方が理にかなっています。

EDITReadAllLinesは静的な呼び出しです。

string[] lines = System.IO.File.ReadAllLines(fileName);

または、ストリームを使用して一度に1行ずつ読み取ります。

var sr = new StreamReader(fileStream);
while (!sr.EndOfStream)
{
  var line = sr.ReadLine();
  // .. per line sub string
}

編集2私は完全な解決策を考え出しました(すべてを読むよりもストリームを読む方が好きです-非常に大きなファイルの方が効率的です-慣れることをお勧めします)

var sb = new StringBuilder();

using (var file = new FileStream("C:/tmp/temps.txt", FileMode.Open, FileAccess.Read))
{
  var sr = new StreamReader(file);

  while (!sr.EndOfStream)
  {
    var nextLine = sr.ReadLine();
    int indexOfEqualSign = nextLine.IndexOf("=");

    if (indexOfEqualSign == -1 || indexOfEqualSign == nextLine.Length)
      continue;

    string rightHandSide = nextLine.Substring(indexOfEqualSign + 1);
    sb.AppendLine(rightHandSide);
  }
}

File.WriteAllText("C:/tmp/temps2.txt", sb.ToString());
于 2012-04-19T17:13:31.173 に答える
1

あなたは正しい方向に進んでいますが、ファイル内の行をループしてから、=:で分割を行う必要があります。

string[] lines = File.ReadAllLines(@"C:\********\temperature.txt"); 
StringBuilder temperatures = new StringBuilder();

foreach (string line in lines)
{
    string[] parts = line.Split('=');

    if (lines.Length > 1)
    {
        tempatures.Append(lines[1]));
        tempatures.Append("\n");
    }
}

File.WriteAllText(@"C:\*******\temperature2.txt", tempatures.ToString());
于 2012-04-19T17:16:17.623 に答える
1

等号で分割して、一度に各行を読み取ります。必ず以下を含めてください:StreamReader用のSystem.IO

try
{
    // Create an instance of StreamReader to read from a file.
    // The using statement also closes the StreamReader.
    using (StreamReader sr = new StreamReader(@"C:********\temperature.txt"))
    {
        String line;
        // Read and display lines from the file until the end of
        // the file is reached.
        while ((line = sr.ReadLine()) != null)
        {
            try
            {
                Console.WriteLine(line.Split('=')[1]);
            } 
            catch
            {
                Console.WriteLine("Contained No equals sign: " + line);
            }
        }
    }
}
catch (Exception e)
{
    // Let the user know what went wrong.
    Console.WriteLine("The file could not be read:");
    Console.WriteLine(e.Message);
}

ソース: http: //msdn.microsoft.com/en-us/library/db5x7c0d.aspx

于 2012-04-19T17:18:39.433 に答える
0
string readFile =  @"C:\****\temperature.txt");
string writeFile = @"C:\****\temperature2.txt");
List<string> lines = new List<string>lines;
....
string sr = new StreamReader(readFile);
foreach (string line in sr.ReadAllLines())
{
   int c = line.IndexOf("=");
   if ( c >= 0 ) {
      lines.Add(line.SubString(c+1);
   }
}

if ( lines.Count > 0 ) {
  System.IO.File.WriteAllText(writeFile, 
     string.Join(Environment.NewLine, lines.ToArray*());
}
于 2012-04-19T17:27:12.417 に答える