从3种不同格式的文本文件中读取数据

时间:2018-09-28 07:41:29

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

我想从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

我不确定是否应该用所有记录填充所有列表集合,或者不确定是否应该读取记录? 请为我提供上述帮助。

1 个答案:

答案 0 :(得分:0)

您可以做的如下:

  1. 创建具有文件中指定的属性的对象(PO​​CO)。
  2. 重写EqualsGetHashCode方法,以便您可以确定2个对象如何相等。 (这将允许您过滤出重复项。)
  3. 创建一个Factory,该路径指定了路径和文件类型,将产生一个IEnumerable,其中包含文件中的所有对象。
  4. 致电上方的工厂,并将所有返回的列表扔到HashSet中。这样会产生一个包含唯一项的集合。

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

根据您的评论,这里是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阅读器或类似的方法(并将其声明为私有)。它的作用是从文件中读取和加载内容。