summaryrefslogtreecommitdiffstats
path: root/src/orcus_detect_main.cpp
blob: 8dc89c6b8db1937bda7c0016e54646c361d7cdbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

#include "orcus/format_detection.hpp"
#include "orcus/exception.hpp"
#include "orcus/stream.hpp"

#include <cstdlib>
#include <iostream>
#include <string>

using namespace orcus;
using namespace std;

int main(int argc, char** argv) try
{
    if (argc != 2)
        return EXIT_FAILURE;

    const char* filepath = argv[1];
    file_content content(filepath);

    if (content.empty())
    {
        cerr << "file is empty" << endl;
        return EXIT_FAILURE;
    }

    format_t detected_type = detect(content.str());

    cout << "type: ";
    switch (detected_type)
    {
        case format_t::csv:
            cout << "plain text format";
            break;
        case format_t::gnumeric:
            cout << "Gnumeric";
            break;
        case format_t::ods:
            cout << "OpenDocument Spreadsheet";
            break;
        case format_t::xls_xml:
            cout << "Microsoft Excel XML";
            break;
        case format_t::xlsx:
            cout << "Microsoft Office Open XML Excel 2007+";
            break;
        case format_t::parquet:
            cout << "Apache Parquet";
            break;
        case format_t::unknown:
        default:
            cout << "unknown";
    }
    cout << endl;

    return EXIT_SUCCESS;
}
catch (const std::exception& e)
{
    cerr << e.what() << endl;
    return EXIT_FAILURE;
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */