我正在尝试读取一个 txt 文件并读取第一列以获取第二列
I am trying to read a txt file and read column one to get column two
我有一个 txt 文件,它有两个不同的值,都是数字,其中第一列是 00 到 0000000(长度为 2 到 12),第二列的长度是 0120 到 0111111111( 4 到 12 长)。我的问题很多:
如何查找特定值(如布尔搜索)
如何return对应的值到它自己的字符串
我试过 StreamReader
没有成功(甚至无法使它起作用),我发现了 .Split
、.Parse
之类的东西,并尝试了很多例子在这里和网上实际上并没有做我需要的事情。
/* Example of useless code I found */
class ReadFromFile
{
static void Main()
{
char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
string text = "one\ttwo three:four,five six seven";
System.Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(delimiterChars);
System.Console.WriteLine($"{words.Length} words in text:");
foreach (var word in words)
{
System.Console.WriteLine($"{word}");
}
}
}
好吧,该代码非常无用,它根本没有完成任务,因为它只是使用 .Split 函数来创建新行,而无助于查找特定值之后的内容。
具体来说,我想搜索 x 值并将 y 值保存为 z 值字符串(这部分使用数学术语,字符串除外)。
像这样?:
char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
string text = "one\ttwo three:four,five six seven";
string[] words = text.Split(delimiterChars);
List<string> values = new List<string>();
for (int i = 0; i < words.Length; i+=2)
{
if(words.Length > i)
if (words[i].Length >= 2 && words[i].Length <= 12) {
if (words[i+1].Length >= 4 && words[i+1].Length <= 12)
{
values.Add(words[i+1]);
}
}
}
我真的不确定我是否完全理解你的问题:P
(如果我有问题请评论,我会再次删除答案)
虽然你没有指定,但我认为你的文件会有多行,每行都符合你的描述,如下所示:
00 0120
0000 0111111111
(etc.)
因此您需要读取每一行,使用 .Split
解析它并查找您想要的值。如果您只需要执行一次,最好是在阅读后立即检查每一行,使用 example:
中的 StreamReader
using System;
using System.IO;
class Test
{
public static void Main()
{
char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
using (StreamReader sr = new StreamReader(@"d:\temp\TestFile.txt"))
{
string line = sr.ReadLine();
string[] words = line.Split(delimiterChars);
if (words[0] == "00")
{
Console.WriteLine($"Found it, yay! words[0]={words[0]}, words[1]={words[1]}");
}
}
}
}
如果您想多次搜索,您可以将拆分的单词放在某个数据结构中而不是搜索 - 可能是 Dictionary
- 并在以后搜索任意多次。
解决方案:
请在 https://dotnetfiddle.net/txr4Qz 查看我的代码,看看是否对您有帮助。
对于您的问题 1:如何查找特定值(如布尔搜索)
You have to check if the word is of a specific type. for eg:
// Checks if word is of number (change it as per your requirement)
if (int.TryParse (words[i], out int _) && int.TryParse (words[i+1], out int _)) { ...Statements... }
对于你的问题2:如何return对应的值到它自己的字符串
You are already getting a string form of data from the file. So store it and process it as required.
我有一个 txt 文件,它有两个不同的值,都是数字,其中第一列是 00 到 0000000(长度为 2 到 12),第二列的长度是 0120 到 0111111111( 4 到 12 长)。我的问题很多:
如何查找特定值(如布尔搜索)
如何return对应的值到它自己的字符串
我试过 StreamReader
没有成功(甚至无法使它起作用),我发现了 .Split
、.Parse
之类的东西,并尝试了很多例子在这里和网上实际上并没有做我需要的事情。
/* Example of useless code I found */
class ReadFromFile
{
static void Main()
{
char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
string text = "one\ttwo three:four,five six seven";
System.Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(delimiterChars);
System.Console.WriteLine($"{words.Length} words in text:");
foreach (var word in words)
{
System.Console.WriteLine($"{word}");
}
}
}
好吧,该代码非常无用,它根本没有完成任务,因为它只是使用 .Split 函数来创建新行,而无助于查找特定值之后的内容。
具体来说,我想搜索 x 值并将 y 值保存为 z 值字符串(这部分使用数学术语,字符串除外)。
像这样?:
char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
string text = "one\ttwo three:four,five six seven";
string[] words = text.Split(delimiterChars);
List<string> values = new List<string>();
for (int i = 0; i < words.Length; i+=2)
{
if(words.Length > i)
if (words[i].Length >= 2 && words[i].Length <= 12) {
if (words[i+1].Length >= 4 && words[i+1].Length <= 12)
{
values.Add(words[i+1]);
}
}
}
我真的不确定我是否完全理解你的问题:P
(如果我有问题请评论,我会再次删除答案)
虽然你没有指定,但我认为你的文件会有多行,每行都符合你的描述,如下所示:
00 0120
0000 0111111111
(etc.)
因此您需要读取每一行,使用 .Split
解析它并查找您想要的值。如果您只需要执行一次,最好是在阅读后立即检查每一行,使用 example:
using System;
using System.IO;
class Test
{
public static void Main()
{
char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
using (StreamReader sr = new StreamReader(@"d:\temp\TestFile.txt"))
{
string line = sr.ReadLine();
string[] words = line.Split(delimiterChars);
if (words[0] == "00")
{
Console.WriteLine($"Found it, yay! words[0]={words[0]}, words[1]={words[1]}");
}
}
}
}
如果您想多次搜索,您可以将拆分的单词放在某个数据结构中而不是搜索 - 可能是 Dictionary
- 并在以后搜索任意多次。
解决方案:
请在 https://dotnetfiddle.net/txr4Qz 查看我的代码,看看是否对您有帮助。
对于您的问题 1:如何查找特定值(如布尔搜索)
You have to check if the word is of a specific type. for eg:
// Checks if word is of number (change it as per your requirement)
if (int.TryParse (words[i], out int _) && int.TryParse (words[i+1], out int _)) { ...Statements... }
对于你的问题2:如何return对应的值到它自己的字符串
You are already getting a string form of data from the file. So store it and process it as required.