如何解决C#如何获取两个文本文件之间的连接
我将两个文本文件读入了两个不同的列表。
第一个 .txt 包含 ID 和狗名,如下所示:
第二个 .txt 再次包含狗的 ID 和类型:
问题是:如何将相同 ID 的名称和类型写入控制台?
代码:
class Program
{
static void Main(string[] args)
{
StreamReader sr = new StreamReader("dognames.txt",Encoding.Default);
List<Names> Dog_names = new List<Names>();
string header = Olvas.ReadLine();
while (!sr.EndOfStream)
{
Dog_names.Add(new Names(Olvas.ReadLine()));
}
sr.Close();
StreamReader sr2 = new StreamReader("dogtypes.txt",Encoding.Default);
List<Types> Dog_types = new List<Types>();
string header = Olvas.ReadLine();
while (!sr2.EndOfStream)
{
Dog_types.Add(new Types(Olvas.ReadLine()));
}
sr2.Close();
}
}
class Names
{
public int ID;
public string Name;
public Names(string DateLine)
{
string[] DateLineElements = DateLine.Split(';');
this.ID = int.Parse(DateLineElements[0]);
this.Name = DateLineElements[1];
}
}
class Types
{
public int ID;
public string Dog_Type;
public Types(string DateLine)
{
string[] DateLineElements = DateLine.Split(';');
this.ID = int.Parse(DateLineElements[0]);
this.Dog_Type = DateLineElements[1];
}
}
}
解决方法
您可能想要一个 linq 连接。我将使用查询语法,因为我发现它对连接更易读:
var j = from n in Dog_names
join t in Dog_types on n.ID = t.ID
select new {
n.Name,t.Dog_Type
};
foreach(var d in j)
Console.WriteLine($"Dog {d.Name} is a {d.Dog_Type}");
如果您想了解方法语法,例如有很多关于 LINQ Join 的教程here
,House.belongsToMany(models.Users,{
through: "Users_Has_House",foreignKey: "House_fk",otherKey: "Users_fk"
});
Users.belongsToMany(models.House,{
through: "Users_Has_House",foreignKey: "Users_fk",otherKey: "House_fk"
});
,
好的,首先你已经把这个非常简单的任务复杂化了。 对此有多种解决方案。
这是一种可能性。
为此创建一个模型,例如:
class Dog
{
public int Id {get; set;}
public string Name {get; set;}
public string DogType {get; set;} //it could be and even should be an enum
}
接下来,只需解析每一行,例如:
class DogParser
{
public Dog CreateDog(string line)
{
Dog dog = new Dog();
string[] fields = line.Split(';');
dog.Id = Convert.ToInt32(fields[0]);
dog.Name = fields[1];
return dog;
}
public void UpdateDog(string line)
{
string[] fields = line.Split(';');
int dogId = Convert.ToInt32(fields[0]);
Dog dog = SomehowGetDogById(dogId);
dog.DogType = fields[0];
}
}
现在,只需将这些文件读入不同的 List 对象即可。并迭代它们。首先,使用名称迭代狗并使用 DogParser 中的 CreateDog 方法。将每只狗保存在某个列表中,或者更好的 Dictionary
然后迭代第二个列表并在方法 SomehowGetDogById
中从字典中返回狗。
此解决方案不完整且容易出错。因此,您必须根据需要对其进行升级。
正如我所说,这只是一个循序渐进的例子。对此有很多解决方案。另一种是使用一些 csv 解析器,例如你可以阅读 this 和 this
,尝试 Join
LINQ 方法:
// Sample definitions
class Types { public int ID; public string Type; }
class Names { public int ID; public string Name; }
// Implementation
var types = new List<Types>();
var names = new List<Names>();
var joinedResults = names.Join(types,n => n.ID,t => t.ID,(name,type) => new { name.Name,type.Type });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。