Initial commit of version 0.9.5.2; no older versions exist for this repo.
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Forms;
|
||||
using System.Linq;
|
||||
|
||||
namespace AdvertsingProfitControl
|
||||
{
|
||||
internal class RowParsing
|
||||
{
|
||||
public static List<string> AdSpecialGroups = new List<string>();
|
||||
|
||||
public string CheckForGroupKeyWord(string cellContents)
|
||||
{
|
||||
var keyWord = "NoGroupFound";
|
||||
|
||||
var query = from adI in AdSpecialGroups
|
||||
where adI.Equals(cellContents, StringComparison.InvariantCultureIgnoreCase)
|
||||
select adI;
|
||||
|
||||
var enumerable = query as string[] ?? query.ToArray();
|
||||
if (enumerable.ToArray().Length > 0)
|
||||
{
|
||||
//Grab the first object in the array and return it.
|
||||
keyWord = enumerable.ToArray().First();
|
||||
}
|
||||
|
||||
return keyWord;
|
||||
}
|
||||
/// <summary>
|
||||
/// Determines a row's status.
|
||||
/// </summary>
|
||||
/// <param name="row">The row from a DataGridView object to be examined.</param>
|
||||
/// <returns>The row's status, such as HeaderRow or NewRow.</returns>
|
||||
public RowAttribute GetRowAttribute(DataGridViewRow row)
|
||||
{
|
||||
//IF the supplied row is null, then simply declare it an IncompleteRow.
|
||||
if (row == null)
|
||||
{
|
||||
return RowAttribute.IncompleteRow;
|
||||
}
|
||||
//IF the supplied row is a new row, by the definition of the DataGridViewRow class, then return NewRow.
|
||||
if (row.IsNewRow)
|
||||
{
|
||||
return RowAttribute.NewRow;
|
||||
}
|
||||
|
||||
var rowContents = new List<string>();
|
||||
var rowAttribute = RowAttribute.MemberRow;
|
||||
//Get the contents of the row that's being examined and add then to a List<string> array.
|
||||
var i = 0;
|
||||
foreach (DataGridViewCell cell in row.Cells)
|
||||
{
|
||||
if (cell.ColumnIndex >= (int) SalesTableColumns.IsHeaderRow) { i++; continue;}
|
||||
//Strip all whitespace characters from the cell, this includes vertical tabs, newlines, and any number of spaces.
|
||||
var cellContentsStripped = new string(cell.EditedFormattedValue.ToString().Where(c => !char.IsWhiteSpace(c)).ToArray());
|
||||
//Now remove all zeros, including any decimal points as these values are meaningless.
|
||||
cellContentsStripped = cellContentsStripped.Replace("0", "");
|
||||
cellContentsStripped = cellContentsStripped.Replace(".", "");
|
||||
if (cellContentsStripped != "")
|
||||
{
|
||||
rowContents.Add(cell.EditedFormattedValue.ToString());
|
||||
}
|
||||
//If the first cell contains nothing, then return as IncompleteRow.
|
||||
else if (cellContentsStripped == "" && i == (int) SalesTableColumns.AdItem)
|
||||
{
|
||||
return RowAttribute.IncompleteRow;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
//With all meaningless content removed, only actual data should be here. So if there are more then one items, than that means there are more then one
|
||||
//cells with meaningful data in them. Which means that this row can be a header row with member rows under it.
|
||||
if (rowContents.Count > 1)
|
||||
{
|
||||
rowAttribute = RowAttribute.HeaderRow;
|
||||
}
|
||||
else if (rowContents.Count == 1) //Check to see if this row is intended to be for a special ad.
|
||||
{
|
||||
var keyWord = CheckForGroupKeyWord(rowContents[0]);
|
||||
//IF a keyword is found then declare this row an AdSpecialRow.
|
||||
if (keyWord != "NoGroupFound")
|
||||
{
|
||||
return RowAttribute.AdSpecialRow;
|
||||
}
|
||||
}
|
||||
|
||||
return rowAttribute;
|
||||
}
|
||||
|
||||
public RowAttribute GetRowAttribute(object[] row)
|
||||
{
|
||||
var rowAttribute = RowAttribute.MemberRow;
|
||||
|
||||
|
||||
|
||||
return rowAttribute;
|
||||
}
|
||||
|
||||
public void PaintDataGridViewRowGroups(DataGridView dataGridView, DataGridView companionDataGridView = null, int startIndex = 0,
|
||||
bool stopOnFirstFullGroupFound = false)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for the presents of a repeat command using the Reg-ex engine.
|
||||
/// If a repeat command is found it returns the line number the command
|
||||
/// specifies to repeat.
|
||||
/// </summary>
|
||||
/// <param name="rowCommandField">The contents of Cell[0] in the row being parsed.</param>
|
||||
/// <returns>Line number to be repeated, -1 if no command is found.</returns>
|
||||
public int CheckForRepeatCommand(string rowCommandField)
|
||||
{
|
||||
const string repeatCommandPattern = @"^repeat( line)?:? [0-9]"; //Reference sheet: https://msdn.microsoft.com/en-us/library/az24scfc.aspx
|
||||
var rgx = new Regex(repeatCommandPattern, RegexOptions.IgnoreCase);
|
||||
var lineNumber = -1;
|
||||
|
||||
if (!rgx.IsMatch(rowCommandField)) return lineNumber;
|
||||
//Parse the string and retrieve the line number
|
||||
var numbers = Regex.Split(rowCommandField, @"\D+");
|
||||
|
||||
lineNumber = int.Parse(numbers[1]);
|
||||
return lineNumber;
|
||||
}
|
||||
}
|
||||
|
||||
public enum RowAttribute
|
||||
{
|
||||
NewRow = 0,
|
||||
MemberRow = 1,
|
||||
HeaderRow = 2,
|
||||
AdSpecialRow = 3,
|
||||
IncompleteRow = 4
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user