More HACMan stuff again

Dependencies:   FatFileSystem SDFileSystem mbed

Committer:
TBSliver
Date:
Thu Jun 11 13:50:10 2015 +0000
Revision:
0:ddc821040077
Initial no idea whats here commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TBSliver 0:ddc821040077 1 #include "txtFile.h"
TBSliver 0:ddc821040077 2
TBSliver 0:ddc821040077 3
TBSliver 0:ddc821040077 4 /**
TBSliver 0:ddc821040077 5 * Constructor when called opens a file
TBSliver 0:ddc821040077 6 *
TBSliver 0:ddc821040077 7 * @param fileAddr
TBSliver 0:ddc821040077 8 * the address of the file, either local, sd or whatever
TBSliver 0:ddc821040077 9 * @param readWrite
TBSliver 0:ddc821040077 10 * whether reading or writing to the file
TBSliver 0:ddc821040077 11 */
TBSliver 0:ddc821040077 12 TxtFile::TxtFile(char fileAddr[], char *readWrite, bool doParseFile) {
TBSliver 0:ddc821040077 13
TBSliver 0:ddc821040077 14 isFileOpen = false;
TBSliver 0:ddc821040077 15 isFileParsed = false;
TBSliver 0:ddc821040077 16 currentFilePos = 0;
TBSliver 0:ddc821040077 17
TBSliver 0:ddc821040077 18 if ((fp = fopen(fileAddr, readWrite)) == NULL) {
TBSliver 0:ddc821040077 19 isFileOpen = false;
TBSliver 0:ddc821040077 20 } else {
TBSliver 0:ddc821040077 21 isFileOpen = true;
TBSliver 0:ddc821040077 22 }
TBSliver 0:ddc821040077 23
TBSliver 0:ddc821040077 24 if(doParseFile) {
TBSliver 0:ddc821040077 25 parseFile();
TBSliver 0:ddc821040077 26 isFileParsed = true;
TBSliver 0:ddc821040077 27 }
TBSliver 0:ddc821040077 28 }
TBSliver 0:ddc821040077 29
TBSliver 0:ddc821040077 30 /**
TBSliver 0:ddc821040077 31 * Destructor when called closes the open file
TBSliver 0:ddc821040077 32 */
TBSliver 0:ddc821040077 33 TxtFile::~TxtFile() {
TBSliver 0:ddc821040077 34 closeFile();
TBSliver 0:ddc821040077 35 }
TBSliver 0:ddc821040077 36
TBSliver 0:ddc821040077 37 /**
TBSliver 0:ddc821040077 38 * Returns true if the file is open
TBSliver 0:ddc821040077 39 *
TBSliver 0:ddc821040077 40 * @returns isFileOpen
TBSliver 0:ddc821040077 41 */
TBSliver 0:ddc821040077 42 bool TxtFile::isOpen() {
TBSliver 0:ddc821040077 43 return isFileOpen;
TBSliver 0:ddc821040077 44 }
TBSliver 0:ddc821040077 45
TBSliver 0:ddc821040077 46 /**
TBSliver 0:ddc821040077 47 * Returns true if file has been parsed
TBSliver 0:ddc821040077 48 *
TBSliver 0:ddc821040077 49 * @returns isFileParsed
TBSliver 0:ddc821040077 50 */
TBSliver 0:ddc821040077 51 bool TxtFile::isParsed() {
TBSliver 0:ddc821040077 52 return isFileParsed;
TBSliver 0:ddc821040077 53 }
TBSliver 0:ddc821040077 54
TBSliver 0:ddc821040077 55 /**
TBSliver 0:ddc821040077 56 * Checks if the file is open, and closes it if it is
TBSliver 0:ddc821040077 57 *
TBSliver 0:ddc821040077 58 * @returns isClosed
TBSliver 0:ddc821040077 59 * returns true if a file was closed, false if not
TBSliver 0:ddc821040077 60 */
TBSliver 0:ddc821040077 61 bool TxtFile::closeFile() {
TBSliver 0:ddc821040077 62 if (isOpen()) {
TBSliver 0:ddc821040077 63 fclose(fp);
TBSliver 0:ddc821040077 64 return true;
TBSliver 0:ddc821040077 65 } else
TBSliver 0:ddc821040077 66 return false;
TBSliver 0:ddc821040077 67 }
TBSliver 0:ddc821040077 68
TBSliver 0:ddc821040077 69 /**
TBSliver 0:ddc821040077 70 * Counts the number of lines, and sets line start positions
TBSliver 0:ddc821040077 71 */
TBSliver 0:ddc821040077 72 void TxtFile::parseFile() {
TBSliver 0:ddc821040077 73 int c = 0; //current character
TBSliver 0:ddc821040077 74 int cPrev = 0; //previous character
TBSliver 0:ddc821040077 75 int lengthCount = 0; //local length counter
TBSliver 0:ddc821040077 76 int lineCount = 0; //local line counter
TBSliver 0:ddc821040077 77 int curPos = 0; //current position in file
TBSliver 0:ddc821040077 78
TBSliver 0:ddc821040077 79 if (!isFileParsed) { //check to see if not already done
TBSliver 0:ddc821040077 80 seekPos(0); //seek to beginning of file
TBSliver 0:ddc821040077 81
TBSliver 0:ddc821040077 82 c = fgetc(fp); //get first character
TBSliver 0:ddc821040077 83 fileLineStart[lineCount] = curPos; //first line ALWAYS starts at zero... so far anyway
TBSliver 0:ddc821040077 84
TBSliver 0:ddc821040077 85 while (c != EOF) { //while not at the end of the file
TBSliver 0:ddc821040077 86 if ((c != '\n') && (c != '\r')) { //if not a newline or carriage return
TBSliver 0:ddc821040077 87 lengthCount++; //increment length counter
TBSliver 0:ddc821040077 88 }
TBSliver 0:ddc821040077 89
TBSliver 0:ddc821040077 90 if (((c == '\n') && (cPrev == '\r')) || ((c == '\r') && (cPrev == '\n'))) { //if a newline (\r\n or \n\r)
TBSliver 0:ddc821040077 91 fileLineLength[lineCount] = lengthCount; //set fileLineLength for current line to lengthCount
TBSliver 0:ddc821040077 92 lineCount++; //increment line counter
TBSliver 0:ddc821040077 93 lengthCount = 0; //reset lengthCount
TBSliver 0:ddc821040077 94 fileLineStart[lineCount] = curPos + 1; //set file line start to next position - may not need the +1?
TBSliver 0:ddc821040077 95 }
TBSliver 0:ddc821040077 96 curPos++;
TBSliver 0:ddc821040077 97 cPrev = c;
TBSliver 0:ddc821040077 98 c = getc(fp);
TBSliver 0:ddc821040077 99 }
TBSliver 0:ddc821040077 100
TBSliver 0:ddc821040077 101 noLines = lineCount;
TBSliver 0:ddc821040077 102
TBSliver 0:ddc821040077 103 isFileParsed = true;
TBSliver 0:ddc821040077 104 seekPos(0); //seek back to the beginning of the file
TBSliver 0:ddc821040077 105 }
TBSliver 0:ddc821040077 106 }
TBSliver 0:ddc821040077 107
TBSliver 0:ddc821040077 108 /**
TBSliver 0:ddc821040077 109 * Returns the number of lines in the file
TBSliver 0:ddc821040077 110 *
TBSliver 0:ddc821040077 111 * @returns noLines
TBSliver 0:ddc821040077 112 */
TBSliver 0:ddc821040077 113 int TxtFile::lineCount() (
TBSliver 0:ddc821040077 114 return noLines;
TBSliver 0:ddc821040077 115 }
TBSliver 0:ddc821040077 116
TBSliver 0:ddc821040077 117 /**
TBSliver 0:ddc821040077 118 * Seeks to the position in the current opened file
TBSliver 0:ddc821040077 119 *
TBSliver 0:ddc821040077 120 * @params seekLoc
TBSliver 0:ddc821040077 121 * byte location to seek to
TBSliver 0:ddc821040077 122 */
TBSliver 0:ddc821040077 123 void TxtFile::seekPos(int seekLoc) {
TBSliver 0:ddc821040077 124 fseek(fp, seekLoc, SEEK_SET);
TBSliver 0:ddc821040077 125 currentFilePos = seekLoc;
TBSliver 0:ddc821040077 126 }
TBSliver 0:ddc821040077 127
TBSliver 0:ddc821040077 128 int TxtFile::getPos() {
TBSliver 0:ddc821040077 129 return currentFilePos;
TBSliver 0:ddc821040077 130 }
TBSliver 0:ddc821040077 131
TBSliver 0:ddc821040077 132 int TxtFile::seekLineStart() {
TBSliver 0:ddc821040077 133 int backCount = 0;
TBSliver 0:ddc821040077 134 int c = 0;
TBSliver 0:ddc821040077 135
TBSliver 0:ddc821040077 136 c = fgetc(fp); //get character at current position
TBSliver 0:ddc821040077 137
TBSliver 0:ddc821040077 138 while ((c != '\n') && (c != '\r')) { //check if character is a newline or carriage return
TBSliver 0:ddc821040077 139 backCount++; //increment backCount
TBSliver 0:ddc821040077 140 fseek(fp, -2, SEEK_CUR); //seek back 2, 1 for the fgetc, 1 more to actually go back one
TBSliver 0:ddc821040077 141 c = fgetc(fp); //get a new character
TBSliver 0:ddc821040077 142 }
TBSliver 0:ddc821040077 143 currentFilePos -= backCount;
TBSliver 0:ddc821040077 144 return backCount;
TBSliver 0:ddc821040077 145 }
TBSliver 0:ddc821040077 146
TBSliver 0:ddc821040077 147 int TxtFile::seekLineEnd() {
TBSliver 0:ddc821040077 148 int count = 0;
TBSliver 0:ddc821040077 149 int c = 0;
TBSliver 0:ddc821040077 150
TBSliver 0:ddc821040077 151 c = fgetc(fp); //get character at position after the newline or carriage return
TBSliver 0:ddc821040077 152
TBSliver 0:ddc821040077 153 while ((c != '\n') && (c != '\r')) { //check if character is a newline or carriage return
TBSliver 0:ddc821040077 154 count++; //increment main counter
TBSliver 0:ddc821040077 155 c = fgetc(fp); //get a new character
TBSliver 0:ddc821040077 156 }
TBSliver 0:ddc821040077 157 currentFilePos += count;
TBSliver 0:ddc821040077 158 return count;
TBSliver 0:ddc821040077 159 }
TBSliver 0:ddc821040077 160
TBSliver 0:ddc821040077 161 void TxtFile::seekLine(int line) {
TBSliver 0:ddc821040077 162 if(isFileParsed) {
TBSliver 0:ddc821040077 163 seekPos(fileLineStart[line - 1]);
TBSliver 0:ddc821040077 164 }
TBSliver 0:ddc821040077 165 }
TBSliver 0:ddc821040077 166
TBSliver 0:ddc821040077 167 /**
TBSliver 0:ddc821040077 168 * Returns the line length of the current line the 'seek head' is on
TBSliver 0:ddc821040077 169 *
TBSliver 0:ddc821040077 170 * @returns lineLength
TBSliver 0:ddc821040077 171 */
TBSliver 0:ddc821040077 172 int TxtFile::lineLength() {
TBSliver 0:ddc821040077 173 int count; //initialise all values needed
TBSliver 0:ddc821040077 174
TBSliver 0:ddc821040077 175 seekLineStart();
TBSliver 0:ddc821040077 176
TBSliver 0:ddc821040077 177 count = seekLineEnd();
TBSliver 0:ddc821040077 178
TBSliver 0:ddc821040077 179 return count; //return count, which is the number of characters in the line
TBSliver 0:ddc821040077 180 }
TBSliver 0:ddc821040077 181
TBSliver 0:ddc821040077 182 /**
TBSliver 0:ddc821040077 183 *
TBSliver 0:ddc821040077 184 */
TBSliver 0:ddc821040077 185 void csvToIntArray(int line, int arrayStart, int arrayEnd, int *array) {
TBSliver 0:ddc821040077 186
TBSliver 0:ddc821040077 187
TBSliver 0:ddc821040077 188 // int i = char a - '0' <---- really easy way to convert char to int. :D
TBSliver 0:ddc821040077 189 }