【问题标题】:Reading data from 3 different text file which are in different format从 3 个不同格式的不同文本文件中读取数据
【发布时间】:2018-09-28 07:41:28
【问题描述】:

我想从 3 个不同格式的文本文件中读取数据,如下所示,根据一些输入源和目标,我需要从以下 3 种格式中获取记录,并且需要填充我的模型以显示非冗余记录对于客户端,我不确定如何从这 3 个不同的文件中获取过滤后的非冗余记录。我正在尝试通过创建端点来使用 Web 应用程序来实现它。

http://{localhost}/searchFlights/{Origin}/{Destination}

Provider1 -------------- 
Origin,Departure Time,Destination,Destination Time,Price
 LAS,6/23/2014 13:30:00,LAX,6/23/2014 14:40:00,$151.00 
YYZ,6/15/2014 6:45:00,YYC,6/15/2014 8:54:00,$578.00 
MIA,6/23/2014 19:40:00,ORD,6/23/2014 21:45:00,$532.00 

Provider2 -------------- 
Origin,Departure Time,Destination,Destination Time,Price 
JFK,6-21-2014 17:55:00,YEG,6-21-2014 23:23:00,$589.00 
LAS,6-22-2014 9:45:00,YYZ,6-22-2014 21:20:00,$549.00 

Provider3 -------------- 
Origin|Departure Time|Destination|Destination Time|Price 
LAS|6/29/2014 14:55:00|LAX|6/29/2014 16:10:00|$201.00 
MIA|6/17/2014 14:55:00|ORD|6/17/2014 17:10:00|$542.00

我不确定是否应该用所有记录填充我的所有列表集合,或者如果我什至不知道如何读取记录,是否应该获取过滤记录? 请在上面的事情上给我一些帮助。

【问题讨论】:

  • 你已经尝试过什么了吗?
  • 似乎有一个分隔符,其形状像'和|'。您可以使用分隔符拆分每一行并将其与列一起使用。
  • 这里其实没有问题,只是一个意向声明和一些思考。所以我们帮不了你
  • 我如何在平面文件中过滤记录,或者我应该如何将所有记录绑定到我可以触发一些 linq 查询以获取相关记录的模型。

标签: c# asp.net-web-api endpoint


【解决方案1】:

你可以做的如下:

  1. 创建具有文件中指定属性的对象 (POCO)。
  2. 重写EqualsGetHashCode 方法,以便确定2 个对象如何相等。 (这将允许您过滤掉重复项)。
  3. 创建一个给定路径和文件类型的Factory,将产生一个包含文件中所有对象的IEnumerable
  4. 调用上面的工厂并将所有返回的列表放入HashSet。这应该会产生一个充满独特物品的集合。

请注意,在第 3 步中,您也可以使用 HashSet,以便立即返回唯一项目列表,从而可能节省您在第 4 步中需要执行的迭代次数。

根据您的评论,这就是 Factory 模式的用武之地。此类将提供有关如何从文件加载对象的抽象。像这样:

public class FlightFactory {
    public static final int FILE_TYPE_1;
    public static final int FILE_TYPE_2;
    public static final int FILE_TYPE_3;

    public static IEnumerble<Flight> loadFlightsFromFile(string filePath, int fileType) {
        switch(fileType) {
            case FILE_TYPE_1:
                 return LoadFromFileType1(filePath);
            ...
        }
    }
}

然后,每个LoadFromFileTypeX 方法将实现一个适当的 CSV 读取器或类似的东西(并将被声明为私有)。它的作用是从文件中读取和加载内容。

【讨论】:

  • 好的,根据您的意见,我有相当的理解,我只想知道如何从 3 个不同的文本文件中填充我的 POCO 模型?
  • @SumitMalviya:我试图扩展我的答案。
  • 我应该使用工厂,我实际上每次都需要从所有三个文件中读取数据,在工厂模式中我需要从外部传递文件类型?
  • @SumitMalviya:你要么需要这样做,要么让工厂类足够智能,以识别文件中的模式,从而知道它需要使用哪种方法。
  • @SumitMalviya:我认为如果您检查如何使用 HashSets 会更好
猜你喜欢
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多