2017-10-28 8 views
0

私は、拡張子.CSVであるカンマ区切りのファイルを持っているとの用語は、次のようになります。ファイルを取り込むと、ファイル内の重複を削除

30,Movies,53808-0776,278,65.75 
31,Beauty,48951-8130,725,83.42 
32,Baby,59779-224,848,82 
33,Industrial,55711-070,753,46.48 
34,Industrial,76446-002,272,89.03 
35,Sports,68151-2870,185,2.86 
36,Toys,0245-0709,783,45.65 
37,Games,49999-963,523,93.65 
38,Beauty,52125-508,500,2.38 
39,Toys,54092-381,783,45.65 
40,Beauty,55154-6649,666,79.52 
41,Jewelry,57664-327,46,10.28 
42,Grocery,49738-453,317,29 

私は何をする私のプログラムを必要とすることは取ることですこの形式の汎用ファイルでは、重複を取り除き、重複のない同じ拡張子の新しいファイルを作成します。ユーザーは、ファイルが存在する正確な場所に入力します。私はクラスを使用して単一のデータレコードを保持しています。これは今まで私のヘッダーのために持っているものです。

#ifndef RECORD_H_ 
#define RECORD_H_ 
#include <iostream> 

class Record { 
public: 
// Constructor 
    std::Record(string department, string item_code, int quantity, double cost); 
// Deconstructor 
    virtual ~Record(); 
// Overloaded '==' and '<' Comparision Methods 
    friend bool operator ==(const Record &a, const Record &b); 
    friend bool operator <(const Record&, const Record&); 
// Overloaded '<<' Operator 
    friend std::ostream& operator <<(std::ostream&, const Record&); 
// Private Member Functions 
private: 
    std::string department; 
    std::string item_code; 
    int quantity; 
    double cost; 
}; 
#endif /* RECORD_H_ */ 

ファイルはすべて小さいので、単純なソート方法が機能します。私はこれらの面で混乱しています。私はベクトル内のオブジェクトをソースコードに格納する行為をしていますか、それともその定義を作成する必要がありますか?また、ファイルを取り込む場合、同じ拡張子で新しいファイルを作成するにはどうすればよいですか? (.csv)

+0

行を記述した.csvは同じではありません...重複を確認する必要がある列 – Varun

+0

私はまさにあなたが意味するものと混同しますが、私が提供したスニペットでIndustrialが2回出現します。 (繰り返されるタイトルは、必ずしも連続した順序であるとは限りません)。作成する各オブジェクトのタイトルを確認するだけです。 –

+0

C++ ''を見てください:http://www.cplusplus.com/reference/map/map/マップのキーはタイトルです、キーの値はそのキーの行の他のすべてです。 –

答えて

0

あなたの質問に定義されているのクラスが定義されていて、あなたのcsvファイルからメモリに読み込んだベクタを持っていると仮定して、重複を削除することができますアルゴリズムのライブラリを使用して:

std::vector<Record> records; // full of Record 

// rearranges the vector, moving all the unique elements to the front 
// and duplicates to the back 
// last is an iterator to beginning of the duplicates 
auto last = std::unique(records.begin(), records.end()); 

// erase all duplicates 
records.erase(last, records.end()); 

std::uniqueRecordであなたの定義されたoperator==を使用します。

関連する問題