/** * @brief readColumn return all the values on a named column * @param pFile is the database to be readed from. * @param pColumnName parameter for returning a value. * @return */ array<char*> readfile::readColumn(string pFile , string pColumnName){ string standardDir; array <char*> errorArray (ONE_BYTE); //if !database, return null array if ( !(file.is_open()) ){ standardDir = createNewFile(&pFile); file.open(standardDir.c_str()); } if ( !(file.is_open()) ){ cout << "NED " + pFile << endl; return errorArray; } int Column = getColumnNumber(&standardDir , &pColumnName ); int regQty = getRegisterQuantity(); string strToConvert = EMPTY_STRING; char * toAdd; array <char*> arrayToReturn (regQty); for (int rowCounter = ONE_BYTE ; rowCounter <= regQty ; rowCounter++){ strToConvert = readField(pFile , rowCounter , pColumnName); toAdd = new char[strToConvert.size()+1]; strcpy(toAdd, strToConvert.c_str()); arrayToReturn[rowCounter - ONE_BYTE] = toAdd; } return arrayToReturn; }
/** * @brief updateColumn From pCname of pFile, replace pToCompare with newData * @param newData * @param pToCompare * @param pFile * @param pCName */ bool writefile::updateColumn(string newData,string pToCompare, string pFile, string pCName){ int currSeek = file.tellg(); int sizeToColumn; int cSize; string standardDir; bool bowl = true; //Relative route + the name of the file if ( !(file.is_open()) ){ string fileH = pFile; standardDir = createNewFile(fileH.c_str()); file.open(standardDir.c_str()); } if ( !(file.is_open()) ){ cout << "NED " + pFile << endl; bowl = false; } int Column = getColumnNumber(&standardDir , &pCName ); int regQty = getRegisterQuantity(); string currentData = K->EMPTY_STRING; for (int rowCounter = K->ONE_BYTE ; rowCounter <= regQty ; rowCounter++){ //Move the seek to the column and register. placeSeekOn( &rowCounter , &Column, &sizeToColumn, &cSize); //Build the string of the old data for (int i = 0 ; i < cSize ; i++){ char temp = file.get(); if (temp == '*'){ break; }else{ currentData.push_back(temp); } } //Compare data. if (currentData == pToCompare){ updateField(newData, pFile , rowCounter , Column); }else{ currentData = K->EMPTY_STRING; } } file.seekg(currSeek); if (file.is_open()){ file.close(); } return bowl; }
array< array<char*> > readfile::getRegisters(string pFile, string pColumnName, string valueToConsult){ string standardDir; int regs = getRegisterQuantity(); int colNum; if ( !(file.is_open()) ){ standardDir = createNewFile(&pFile); file.open(standardDir.c_str()); } colNum = getColumnNumber(&standardDir, &pColumnName); array< array<char*> > select (getRegisterQuantity()); for ( int i = ZE_ROW ; i < regs ; i ++){ if(valueToConsult == readField(pFile,i+1,colNum)){ select [i] = readRegistry( pFile , colNum); } } return select; }
bool writefile::deleteRegister(string pFile, string pCName, string newData){ int currSeek = file.tellg(); int Column; int cSize; string standardDir; bool bowl = true; //Relative route + the name of the file if ( !(file.is_open()) ){ standardDir = createNewFile(pFile.c_str()); file.open(standardDir.c_str()); } if ( !(file.is_open()) ){ cout << "NED " + pFile << endl; return false; } Column = getColumnNumber(&standardDir , &pCName ); cSize = getRegisterSize(); int regQty = getRegisterQuantity(); string voidField = K->EMPTY_STRING; int sizeToColumn = sizeUntilColumn(Column); fillString(&voidField,cSize); cout << voidField.length() <<endl; for (int rowCounter = K->ONE_BYTE ; rowCounter <= regQty ; rowCounter++){ //Compare data. if (readField(pFile , rowCounter , Column) == newData){ placeSeekOn(&rowCounter , &Column, &sizeToColumn, &cSize); if (file.is_open()){ file << voidField; } else { bowl = false; } } } file.seekg(currSeek); if (file.is_open()){ file.close(); } return bowl; }