Код C++ для загрузки текстового файла в файловую базу геоданных в ArcGIS

Я новичок в C++, но имею опыт работы с ArcGIS (используется для баз геоданных). Вот некоторый код, который я написал для загрузки текстового файла в файловую базу геоданных... да, я знаю, что объявления и многие вещи выглядят безумными, но у меня крайний срок, и я не не знаю, как еще это сделать (и просто не имеют знаний). Пожалуйста, дайте мне знать, если у вас есть какие-либо входные данные! Это было бы очень признательно.

Проблемы: -текстовый файл не загружается в gdb -он застревает в бесконечном цикле (по крайней мере, для загрузки текстового файла в резервный текстовый файл) -он печатает сумасшедшие вещи в резервный текстовый файл, которых НЕТ в текстовом файле. -Возможно, другие вещи, о которых я понятия не имею. -Я разместил здесь, потому что я не уверен, какой отклик он получит на форуме ГИС (гораздо больше ориентированном на python). Если вы думаете, что он получит хороший совет там ... lmk.

Код:

#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
using namespace std;
int main()
{
   ifstream textFile;
   ofstream backupFile;
   ofstream gdb;
   string RECORDID;
   string SURVEY_TYPE;
   string CLIENT;
   string CERTIFIED_TO;
   string KEYWORDS;
   string SECTION;
   string TOWNSHIP;
   string RANGE;
   string GRANT;
   string SUBDIVISION;
   string PROPERTY_NOTES;
   string PROPERTY_FOLDER;
   string PROJECT_DWG;
   string FEMA_FIRMETTE;
   string LOT_GRADE;
   string FEMA_ELEVATION;
   string JOB_SHEET;
   string FIELD_NOTES;
   string ENGINEER_FOLDER;
   string ADDRESS;
   string CITY;
   string STATE;
   string ZIPCODE;
   string COUNTY;
   string INTERSECT_STREET;
   string ADDITIONAL_NOTES;
   double LATITUDE;
   double LONGITUDE;
   string HTML;
   string DATE_FIELD_WORK;
   string JOB_NUMBER;
   string SEC_TWN_RNG;
   string PROJECT_PDF;
   string LOT;
   string USER;
   string BLOCK;
   string TRACT;
   string DMS_LAT;
   string DMS_LONG;
   string PLAT_BOOK;
   string PLAT_PGS;
   string UNIT;
   string PHASE;
   string HSE;
   string OWNER;
   string SUBDIVISION_PLAT;
   string CTY_FFE_CERT;
   string JOB_NUM_ID;
   string DATE_ADDED;


   cout << "Textfile uploading" << endl;
   textFile.open("test2.txt");
   backupFile.open("backup2.txt");
   gdb.open("test.gdb\\project");

   textFile >> RECORDID >> SURVEY_TYPE >> CLIENT >> CERTIFIED_TO >> KEYWORDS >> SECTION >> TOWNSHIP >> RANGE >> GRANT >> SUBDIVISION >> PROPERTY_NOTES >> PROPERTY_FOLDER >> PROJECT_DWG >> FEMA_FIRMETTE >> LOT_GRADE >> FEMA_ELEVATION >> JOB_SHEET >> FIELD_NOTES >> ENGINEER_FOLDER >> ADDRESS >> CITY >> STATE >> ZIPCODE >> COUNTY >> INTERSECT_STREET >> ADDITIONAL_NOTES >> LATITUDE >> LONGITUDE >> HTML >> DATE_FIELD_WORK >> JOB_NUMBER >> SEC_TWN_RNG >> PROJECT_PDF >> LOT >> USER >> BLOCK >> TRACT >> DMS_LAT >> DMS_LONG >> PLAT_BOOK >> PLAT_PGS >> UNIT >> PHASE >> HSE >> OWNER >> SUBDIVISION_PLAT >> CTY_FFE_CERT >> JOB_NUM_ID >> DATE_ADDED;

   while(!(textFile.eof()))
   {
       gdb << RECORDID << SURVEY_TYPE << CLIENT << CERTIFIED_TO << KEYWORDS << SECTION << TOWNSHIP << RANGE << GRANT << SUBDIVISION << PROPERTY_NOTES << PROPERTY_FOLDER << PROJECT_DWG << FEMA_FIRMETTE << LOT_GRADE << FEMA_ELEVATION << JOB_SHEET << FIELD_NOTES << ENGINEER_FOLDER << ADDRESS << CITY << STATE << ZIPCODE << COUNTY << INTERSECT_STREET << ADDITIONAL_NOTES << LATITUDE << LONGITUDE << HTML << DATE_FIELD_WORK << JOB_NUMBER << SEC_TWN_RNG << PROJECT_PDF << LOT << USER << BLOCK << TRACT << DMS_LAT << DMS_LONG << PLAT_BOOK << PLAT_PGS << UNIT << PHASE << HSE << OWNER << SUBDIVISION_PLAT << CTY_FFE_CERT << JOB_NUM_ID << DATE_ADDED << endl;
       backupFile << RECORDID << " " << SURVEY_TYPE << " " << CLIENT << " " << CERTIFIED_TO << " " << KEYWORDS << " " << SECTION << " " << TOWNSHIP << " " << RANGE << " " << GRANT << " " << SUBDIVISION << " " << PROPERTY_NOTES << " " << PROPERTY_FOLDER << " " << PROJECT_DWG << " " << FEMA_FIRMETTE << " " << LOT_GRADE << " " << FEMA_ELEVATION << " " << JOB_SHEET << " " << FIELD_NOTES << " " << ENGINEER_FOLDER << " " << ADDRESS << " " << CITY << " " << STATE << " " << ZIPCODE << " " << COUNTY << " " << INTERSECT_STREET << " " << ADDITIONAL_NOTES << " " << LATITUDE << " " << LONGITUDE << " " << HTML << " " << DATE_FIELD_WORK <<  " " << JOB_NUMBER << " " << SEC_TWN_RNG << " " << PROJECT_PDF << " " << LOT << " " << USER << " " << BLOCK << " " << TRACT << " " << DMS_LAT << " " << DMS_LONG << " " << PLAT_BOOK << " " << PLAT_PGS << " " << UNIT << " " << PHASE << " " << HSE << " " << OWNER << " " << SUBDIVISION_PLAT << " " << CTY_FFE_CERT << " " << JOB_NUM_ID << " " << DATE_ADDED << " " << endl;
       cout << "Text file was uploaded." << endl;
   }

   textFile.close();
   backupFile.close();
   gdb.close();

system ("Pause");
return 0;
}

ЛЮБОЙ совет приветствуется. Большое спасибо!


person Tee    schedule 23.07.2014    source источник
comment
Вы пытались позвонить gdb.flush() после того, как закончили писать?   -  person jaredready    schedule 23.07.2014
comment
нет, но я сейчас. куда это должно идти?   -  person Tee    schedule 23.07.2014
comment
После того, как вы закончите писать gdb. Кроме того, если вы застряли в бесконечном цикле, это означает, что вы никогда не доберетесь до конца textFile, что имеет смысл, поскольку вы никогда ничего не делаете с этим в своем цикле.   -  person jaredready    schedule 23.07.2014
comment
понятно. добавил счет. просто есть несколько проблем с некоторыми забавными значениями полей. опубликует окончательный код, когда закончите. спасибо!   -  person Tee    schedule 23.07.2014
comment
Без проблем! выложу как ответ   -  person jaredready    schedule 23.07.2014
comment
хорошо, все еще не записываю в GDB и получаю этот странный текст в моем файле резервной копии в середине строки (и тогда больше ничего не печатается): 4.48739e-306 4.48739e-306. это должно быть имя папки с пробелами (но другие пробелы печатаются в файле резервной копии, поэтому не уверен, что это проблема)   -  person Tee    schedule 23.07.2014
comment
Является ли test.gdb\\project обычным текстовым файлом? Я не знаком с базами геоданных. Ваш код выглядит нормально, за исключением проблем со стилем и вашего условия цикла, не имеющего никакого смысла. Запись должна работать до тех пор, пока вы не пытаетесь записать в какую-либо базу данных, используя ostream.   -  person jaredready    schedule 23.07.2014
comment
Я исправил петлю, просто не опубликовал ее, потому что, вероятно, собираюсь еще немного ее настроить. Каков правильный метод записи в базу данных?   -  person Tee    schedule 23.07.2014
comment
Вам нужно будет ознакомиться с документацией вашей базы данных. Они должны предоставить вам какой-то API.   -  person jaredready    schedule 24.07.2014


Ответы (1)


Вам нужно вызвать ostream::flush(), чтобы записать данные из потока в файл.

while(!(textFile.eof()))
{
    gdb << "All your values...";
}

gdb.flush();
//Close your streams

Вызов fstream::close() на gdb, как вы делаете, должен записывать все ожидающие данные в файл. Я не уверен, почему это не происходит для вас, но вызов ostream::flush() также сделает это.

person jaredready    schedule 23.07.2014