Работа с Excel, CSV и ifstream в Mac OS X - PullRequest
0 голосов
/ 17 декабря 2011

Я создал программу с большим тестовым CSV-файлом, и ifstream работает как надо.Затем я открыл файл с помощью Text Edit, вставил только несколько строк большого файла и сохранил второй файл.После нескольких попыток не открывать файл, я обнаружил, что вы должны быть осторожны при сохранении файлов с помощью TextEdit.После того, как я сохранил его как обычный текстовый файл с расширением .csv, он также заработал.У меня проблема, если я открою файл csv в Excel 2011 для Mac и попытаюсь вставить несколько строк в новый файл Excel и сохранить его, если поток не может открыть файл.Я был осторожен, чтобы сохранить его правильно.

Я открыл терминал, и «кошка» перетащила туда файл, и он как будто открывается в середине файла.Есть ли способ решить проблему такого типа с объектом ifstream?возможно, установив флаг, который заставляет ifstream открывать файл вверху?В приложении есть простая функция валидатора, которая считает строки в файле и проверяет заголовок (если таковой существует).Пожалуйста, скажите мне, что я мог бы сделать лучше, чтобы избежать некоторых из этих проблем.Большинство людей, которые в конечном итоге используют этот код, будут использовать утилиты с рабочего стола Mac.

код:

int FileWriter::ableToReadFile(std::string markupURI){

    int numberOfLines;
    bool headerChk = true;


    std::fstream verify;
    verify.open(markupURI.c_str());

    std::string countingLine;

    if(verify.is_open()){

        std::getline(verify, countingLine);

        //verify to header
        std::istringstream iss(countingLine);

        size_t pos;
        pos = iss.str().find("Time,Team,Sport,City");

        if(pos == std::string::npos){//its not there
            headerChk = false;
            this->setErrorMesssage("Invalid header for a Schedule file");
            return 0;
        }

        iss.clear();

        if(headerChk == true){//go ahead and get the number of lines

            while (std::getline(verify, countingLine, '\r'))
                ++numberOfLines;

        }


    }//end if verify.is_open()

    verify.close();

    if(numberOfLines > 1){//subtract the header line

        numberOfLines --;
        return numberOfLines;
    }
    else {
        this->setErrorMesssage("Error Reading File");
        return 0;
    }

}//end able to read file
...