private void openConfiguarionToolStripMenuItem_Click(object sender, EventArgs e) { errorConfGroup = null; errorConfNum = null; errConfiSecond = null; OpenFileDialog open = new OpenFileDialog(); //new open file dialog open.Title = "Open Folders"; //title open.Filter = "File(.txt)|*.txt"; //extension if (open.ShowDialog() == DialogResult.OK) { //succeed string file = open.FileName; MessageBox.Show(file, "selected reminder", MessageBoxButtons.OK, MessageBoxIcon.Information); StreamReader sr = new StreamReader(open.FileName); string strGroup = sr.ReadLine(); string pointPerWord = sr.ReadLine(); ValidFile valFil = new ValidFile(); string regex = @"(\d+)"; errorConfGroup = valFil.valConfGroup(strGroup); int group = match(regex, strGroup); if (valFil.valConfSecond(pointPerWord) != null) { errConfiSecond = valFil.valConfSecond(pointPerWord); } else { point = match(regex, pointPerWord); } int i = 0; string line; //int[] chaScore = new int[52]; //stat to read configuration file from the third line while ((line = sr.ReadLine()) != null) { if (valFil.valConfNum(line) != null) { errorConfNum = valFil.valConfNum(line) + errorConfNum; } else { chaScore[i] = match(regex, line); } //Console.Write(chaScore[i]); i++; } } }
/// <summary> /// Step 1: Open file dialog /// Step 2: Select input file /// Step 3: Obtain filename /// Step 4: Validate input file and crozzle /// Step 5: Calculate score /// Step 6: Display crozzle, score, and errors and log /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void openFileToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog open = new OpenFileDialog(); //Define OpenFileDialog open.Title = "Open Folders"; //Dialog Title open.Filter = "File(.txt)|*.txt"; //File extension if (open.ShowDialog() == DialogResult.OK) { ValidFile val = new ValidFile(); //Succeed string file = open.FileName; MessageBox.Show(file, "selected reminder", MessageBoxButtons.OK, MessageBoxIcon.Information); StreamReader sr1 = new StreamReader(open.FileName); int lineNum = sr1.ReadToEnd().Split('\n').Length - 2; //obtain the number of word in crozzle sr1.Close(); StreamReader sr = new StreamReader(open.FileName); char[] separator = { ',' }; string line; string[] wordArr = new string[lineNum]; int[] hor = new int[lineNum]; int[] ver = new int[lineNum]; string[] direction = new string[lineNum]; string[] firstLine = sr.ReadLine().Split(separator); string errorFirstLen = @"<p>" + val.validdateFirstLen(firstLine.Length) + @"</p>"; string[] secondLine = sr.ReadLine().Split(separator); string errorWordList = null; //validate whether the second line match specific pattern for (int m = 0; m < secondLine.Length; m++) { if (secondLine[m] == "") { errorWordList = @"<p>There is a space in wold list, which is invalid.</p>" + errorWordList; } if (!val.validateIfWord(secondLine[m])) { errorWordList = @"<p>" + secondLine[m] + @" is an invalid word in word list" + errorWordList; } } string level = firstLine[0]; string[] errorFirst = new string[firstLine.Length - 1]; int[] numFirst = new int[firstLine.Length - 1]; string firstError = null; //Validate whether the first line match specific pattern for (int k = 0; k < firstLine.Length - 1; k++) { if (val.validateIfNum(firstLine[k + 1])) { numFirst[k] = Convert.ToInt16(firstLine[k + 1]); } else if (firstLine[k + 1] == "") { errorFirst[k] = @"<p>There is a space in the first line, which is invalid.</p>"; } else { errorFirst[k] = @"<p>" + firstLine[k + 1] + @" is not a number in the first line.</p>"; } firstError = firstError + errorFirst[k]; } int wordList = numFirst[0]; string errorActNum = val.validateActuNum(wordList, secondLine); int rowsNum = numFirst[1]; int colsNum = numFirst[2]; char[,] wordcha = new char[rowsNum, colsNum]; char[,] wordHor = new char[rowsNum, colsNum]; char[,] wordVer = new char[rowsNum, colsNum]; for (int rows = 0; rows < rowsNum; rows++) { for (int cols = 0; cols < colsNum; cols++) { wordcha[rows, cols] = '\0'; } } //Crozzle crozzleDis = new Crozzle(); string errorDirec = null; string errorWord = null; string errorEdge = null; int i = 0; //start to read input file from the third line while ((line = sr.ReadLine()) != null) { string[] wordSpl = line.Split(separator); //separate and store each line to an array direction[i] = wordSpl[0]; hor[i] = Convert.ToInt16(wordSpl[1]); ver[i] = Convert.ToInt16(wordSpl[2]); wordArr[i] = wordSpl[3]; if (!val.validateIfWord(wordArr[i])) //check whether word is a word { errorWord = @"<p>" + errorWord + wordArr[i] + @" is an invalid word in crozzle"; } if (!val.validateDirec(direction[i])) //check whether direction is HORIZONTAL or VERTICAL { errorDirec = errorDirec + @"<p>There is a word " + direction[i] + @" cannot be seen as direction. (HORIZONTAL or VERTICAL)</p> "; } if (direction[i] == "HORIZONTAL") { if (val.validateEdgeHor(ver[i], colsNum, hor[i], rowsNum, wordArr[i]) == null) { crozzleDis.addHor(hor[i], ver[i], wordArr[i], wordcha, wordHor); //add word to crozzle array and horizontal array } else { errorEdge = errorEdge + val.validateEdgeHor(ver[i], colsNum, hor[i], rowsNum, wordArr[i]); } } if (direction[i] == "VERTICAL") { if (val.validateEdgeVer(hor[i], rowsNum, ver[i], colsNum, wordArr[i]) == null) { crozzleDis.addVer(hor[i], ver[i], wordArr[i], wordcha, wordVer); } else { errorEdge = errorEdge + val.validateEdgeVer(hor[i], rowsNum, ver[i], colsNum, wordArr[i]); } } i++; } Configuration config = new Configuration(); ValidCro valCro = new ValidCro(); int[] insert = new int[lineNum]; string errorInsert = null; string errorGroup = null; char[,] insertArr = new char[rowsNum, colsNum]; config.storeInsert(wordHor, wordVer, rowsNum, colsNum, insertArr); //check different level constraints for (int m = 0; m < wordArr.Length; m++) { if (direction[m] == "HORIZONTAL") { if (val.validateEdgeHor(ver[m], colsNum, hor[m], rowsNum, wordArr[m]) == null) { insert[m] = valCro.InsertHor(hor[m], ver[m], wordArr[m], insertArr, rowsNum, colsNum); if (level == "EASY") { errorInsert = errorInsert + valCro.insertEasyNum(insert[m], wordArr[m], direction[m]); } if (level == "MEDIUM") { errorInsert = errorInsert + valCro.insertMedNum(insert[m], wordArr[m], direction[m]); } if (level == "HARD") { errorInsert = errorInsert + valCro.insertHardNum(insert[m], wordArr[m], direction[m]); } } } if (direction[m] == "VERTICAL") { if (val.validateEdgeVer(hor[m], rowsNum, ver[m], colsNum, wordArr[m]) == null) { insert[m] = valCro.InsertVer(hor[m], ver[m], wordArr[m], insertArr, rowsNum, colsNum); if (level == "EASY") { errorInsert = errorInsert + valCro.insertEasyNum(insert[m], wordArr[m], direction[m]); } if (level == "MEDIUM") { errorInsert = errorInsert + valCro.insertMedNum(insert[m], wordArr[m], direction[m]); } if (level == "HARD") { errorInsert = errorInsert + valCro.insertHardNum(insert[m], wordArr[m], direction[m]); } } } } string errorTouch = null; if (level == "EASY") //check touch { errorTouch = valCro.easyTouchHor(wordHor, rowsNum, colsNum) + valCro.easyTouchVer(wordVer, rowsNum, colsNum); } if (level == "HARD") //check group { errorGroup = valCro.decideGroup(direction, wordArr, hor, ver); } int score = config.score(config.decideInsert(wordHor, wordVer, rowsNum, colsNum), chaScore); //caculate score string error = errorConfGroup + errConfiSecond + errorConfNum + val.validateWordListNum(wordList) + val.validateLevel(level) + val.validateRowsNum(rowsNum) + val.validateColNum(colsNum) + val.validateWordExist(wordArr, secondLine) + val.validateRepeat(wordArr) + errorTouch + errorGroup + firstError + errorFirstLen + errorActNum + errorInsert + errorWordList + errorDirec + errorEdge + errorWord; int finalSco = 0; if (error == "<p></p>") { finalSco = point * wordArr.Length + score; error = "No Errors"; } string scoreDis = @"<h1>Score: " + finalSco + @"</h1>"; string levelDis = @"<h3>Level: " + level + @"</h3>"; //display webBrowsercrozzle.DocumentText = header + crozzleDis.display(rowsNum, colsNum, wordcha) + scoreDis + levelDis + footer; webBrowsererror.DocumentText = header + error + footer; //log errors LogFile lf = new LogFile(); lf.Log(error, "error"); } }