如果我们在.txt文件中存储数据,如何验证和返回数据?

时间:2013-02-28 14:55:01

标签: c# streamreader

我有一个记事本(.txt)文件,其中有三个字段,即ID Name和Location。我想使用streamreader在C#中读取这些数据,并检查文件中是否存在ID的条件。如果是的话,我应该将该行作为输出而不是错误。

假设我有以下txt文件,字段为

00125  JAMES  LONDON
00127  STARK  USA
00128  ARNOLD AUSTRALIA

现在,我应该要求用户输入ID。如果Id匹配,那么我应该将该特定行作为输出。例如。如果用户输入00127,那么我应该输出为

00127 JAMES LONDON

我知道如果数据存储在数据库中,这将非常简单。但是如果数据存储在.txt文件中会怎么样呢。

先谢谢

3 个答案:

答案 0 :(得分:1)

最简单的解决方案(假设你有固定的ID格式 - 五位数字):

var users = File.ReadAllLines("data.txt")
                .ToDictionary(line => line.Substring(0, 5));

创建字典,其中行为值,id为键。用法:

string line = users["00125"]; // 00125  JAMES  LONDON

这是最简单的解决方案。但实际上,我会介绍一些类:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Location { get; set; }

    public static User Parse(string s)
    {
        var parts = s.Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries);
        return new User {
            Id = Int32.Parse(parts[0]),
            Name = parts[1],
            Location = parts[2]
        };
    }

    public override string ToString()
    {
        return String.Format("{0:00000} {1} {2}", Id, Name, Location);
    }
}

然后解析每一行并将用户放到Dictionary<int, User>类型的字典中。这将使您的代码强类型化并更易于维护:

var users = File.ReadAllLines("data.txt")
                .Select(line => User.Parse(line))
                .ToDictionary(u => u.Id);

var user = users[127];
string name = user.Name; // STARK
Console.WriteLine(user); // 00127 STARK USA

答案 1 :(得分:0)

您可以使用StreamReader来读取文件中的内容。

然后,您可以使用String拆分Split

这样,您就可以在二维数组中添加所有项目。然后数组看起来像{{00125, JAMES, LONDON}, {00127, STARK, USA}, {00128, ARNOLD, AUSTRALIA}}。使用它,您可以将输入与每个数组的第一个条目进行比较,并相应地返回数据。

这应该让你清楚地了解从现在开始的方向。

答案 2 :(得分:0)

有几种选择:

  • 每次收到请求时都会读取血腥文件。如果文件很小并且请求不频繁,这将正常工作。您逐行阅读,并将id与用户的id进行比较。实施起来非常快,但在资源利用方面却很愚蠢。运行时复杂度为O(N) - 在最坏的情况下,您需要扫描整个文件。

  • 您可以修改第一个选项并添加一层缓存。如果您经常查询同一id,您将获得良好的性能提升。运行时复杂度仍为O(N) - 在最坏的情况下,您需要扫描整个文件。而且距离快速还很远。

  • 您也可以尝试对文件ids进行一次排序。使用最佳算法,花费O(N x Log(N)时间,花费一次预处理数据的时间。但是,任何阅读查询都可以使用基于O(Log(N))的二进制搜索在id中执行。

如果您要查找代码段,我会搜索StreamReaderTextReaderStreamWriterbinary searchquick sort。野外有很多样品......