Help Creating XmlNode / XmlAttribute Elegantly

I am creating a configuration class to read / write a standard configuration file.

		<?xml version="1.0" encoding="utf-8"?>
		<configuration>
			<appSettings>
				<add key="ConnectionString" value="server=(local);" />
			</appSettings>
		</configuration>

I am using a XmlDocument for my base implementation.

I am looking to see if there is a better way to add a new node / attribute than using
XmlDocument.InnerXml.  I would consider this to be a hack but couldn't really see another
way of doing this without defining namespaces and the like.

I have included the full file below and the lines that I am wondering about are lines: 79, 227, and 266

Thanks,
Dave


===================================

using System;
using System.Xml;
using System.Text;

namespace Storage.Utility.Configuration
{
	/// <summary>
	/// Class for Reading / Writing Configuration Options
	/// </summary>
	public class Configuration
	{
		#region Data Members

		private XmlDocument xmlDoc		= null;
		private XmlElement	root		= null;
		private XmlNode		node		= null;

		private string		filename	= null;
		private string		queryString	= null;

		#endregion
		
		#region Constructor

		public Configuration(string configFileName)
		{
			filename = configFileName;
		}

		#endregion

		#region Methods

		#region Miscellaneous

		/// <summary>
		/// Initialize the Configuration Class
		/// </summary>
		private void Initialize()
		{
			LoadConfiguration();
		}

		#endregion

		#region File Access

		/// <summary>
		/// Reload the Configuration File
		/// </summary>
		public void ReloadConfiguration()
		{
			LoadConfiguration();
		}


		/// <summary>
		/// Save the Configuration File
		/// </summary>
		public void Save()
		{
			SaveConfiguration();
		}


		/// <summary>
		/// Load the Configuration File
		/// </summary>
		private void LoadConfiguration()
		{
			try
			{
				xmlDoc = new XmlDocument();
				xmlDoc.Load(filename);
			}
			catch (Exception)
			{
				// Create Configuration File
				xmlDoc.InnerXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><configuration></configuration>";
			}
			finally
			{
				root = xmlDoc.DocumentElement;
			}
		}


		/// <summary>
		/// Save the Configuration File
		/// </summary>
		private void SaveConfiguration()
		{
			try
			{
				xmlDoc.Save(filename);
			}
			catch (Exception ex)
			{
				// Can't do anything
				throw (ex);
			}
		}

		#endregion

		#region Retrieve Values

		/// <summary>
		/// Get the Value of the Key 
		/// </summary>
		/// <param name="section"></param>
		/// <param name="key"></param>
		/// <returns></returns>
		public string GetValue(string section, string key)
		{
			try 
			{
				// Find the Node
				node = GetValueNode(section, key);
				if (node != null)
				{
					// Retrieve Value
					XmlNode valueNode = node.Attributes.GetNamedItem("value");
					return (valueNode.Value);
				}
			}
			catch (Exception)
			{
				// Nothing to do
			}

			// Error Occurred
			return (null);
		}

		
		/// <summary>
		/// Find the Node that the Key belongs to
		/// </summary>
		/// <param name="section"></param>
		/// <param name="key"></param>
		/// <returns></returns>
		private XmlNode GetValueNode(string section, string key)
		{
			try 
			{
				// XML Search Path
				queryString = "/configuration/" + section + "/add[@key=\"" + key + "\"]";

				// Look from the Root of the Document
				return (root.SelectSingleNode(queryString));
			}
			catch (Exception)
			{
				// Nothing to do
			}

			// Error Occurred
			return (null);
		}

		#endregion

		#region Store Values

		/// <summary>
		/// Store Key / Value in Configuration File
		/// </summary>
		/// <param name="section"></param>
		/// <param name="key"></param>
		/// <param name="keyValue"></param>
		/// <returns></returns>
		public bool StoreValue(string section, string key, string keyValue)
		{      
			try 
			{
				// Find Node if it exists
				node = GetValueNode(section, key);
				if (node != null)
				{
					// Update Value
					node = node.Attributes.GetNamedItem("value");
					node.Value = keyValue;
					return (true);
				}
			
				// Node Doesn't Exist -> Get/Create Section -> Add Key / Value
				if (GetSection(section) == true)
					return (CreateValueNode(section, key, keyValue));
			}
			catch (Exception)
			{
				// Nothing to do			
			}

			// Error Occurred
			return (false);
		}

		#endregion

		#region Create Nodes

		/// <summary>
		/// Create New Key / Value Entry
		/// </summary>
		/// <param name="section"></param>
		/// <param name="key"></param>
		/// <param name="keyValue"></param>
		/// <returns></returns>
		private bool CreateValueNode(string section, string key, string keyValue)
		{
			try
			{
				// Get Section
				queryString = "/configuration/" + section;
				node = root.SelectSingleNode(queryString);

				// Node Must Exist
				if (node != null)
				{
					// Create and Add New Key / Value Entry
					StringBuilder sb = new StringBuilder(500);
					sb.Append("<add key=\"");  sb.Append(key);		 sb.Append("\" ");
					sb.Append("value=\"");	   sb.Append(keyValue);	 sb.Append("\" />");  

					node.InnerXml += sb.ToString();
					return (true);
				}
			}
			catch (Exception)
			{
				// Nothing to do
			}

			// Error Occurred
			return (false);
		}


		/// <summary>
		/// Get / Create a New Configuration Section 
		/// </summary>
		/// <param name="section"></param>
		/// <returns></returns>
		private  bool GetSection(string section)
		{
			try
			{
				// Does the Section Exist
				queryString = "/configuration/" + section;
				node = root.SelectSingleNode(queryString);
				if (node != null)
					return (true);

				// Get the Configuration Node
				queryString = "/configuration";
				node = root.SelectSingleNode(queryString);
				if (node != null)
				{
					// Create a New Section
					StringBuilder sb = new StringBuilder(1000);
					sb.Append("<");   sb.Append(section);  sb.Append(">"); 
					sb.Append("</");  sb.Append(section);  sb.Append(">");  

					node.InnerXml += sb.ToString();
					return (true);
				}
			}
			catch (Exception)
			{
				// Nothing to do
			}

			// Error Occurred
			return (false);
		}
		#endregion

		#endregion

	} // Class
}

0
Webbert (6)
9/2/2004 12:52:31 PM
dotnet.xml 7266 articles. 0 followers. Follow

2 Replies
2266 Views

Similar Articles

[PageSpeed] 56

"David Elliott" <Webbert@newsgroups.nospam> wrote in message news:2b5ej01vee1p82uoqo9a0os9g4alfia3g2@4ax.com...
> I am looking to see if there is a better way to add a
> new node / attribute than using XmlDocument.InnerXml.
: :
> but couldn't really see another way of doing this without
> defining namespaces and the like.

The example XML you've given doesn't contain any namespaces,
so why should you define one?

Have a look at the CreateElement() and CreateAttribute()
methods of XmlDocument, and then AppendChild() on XmlNode
(and remember that XmlDocument is an XmlNode, so it also
allows you to AppendChild() nodes to it).

> the lines that I am wondering about are lines: 79, 227,
> and 266


79: xmlDoc.InnerXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><configuration></configuration>";

If you set UTF-8 Encoding on an I/O Stream wrapped by an
XmlTextWriter (or TextWriter), this XML declaration will
be emitted for you automatically.

Here's how you'd create a custom XmlDeclaration for the
XmlDocument (note that if you do Save this XML to a
TextWriter-based class, its Encoding takes precedence).

    XmlDeclaration xmlDecl = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");

Then you'd want to create your <configuration> element.

    XmlElement eRoot = xmlDoc.CreateElement( "configuration");

Finally, add the root element to XmlDocument and insert
the XmlDeclaration before it,

    xmlDoc.AppendChild( eRoot);
    xmlDoc.InsertBefore( xmlDecl, eRoot);


: :
223: StringBuilder sb = new StringBuilder(500);
224: sb.Append("<add key=\"");  sb.Append(key); sb.Append("\" ");
225: sb.Append("value=\"");    sb.Append(keyValue); sb.Append("\" />");
226:
227: node.InnerXml += sb.ToString();

    XmlElement eAdd = xmlDoc.CreateElement( "add");
    eAdd.SetAttribute( "key", key);
    eAdd.SetAttribute( "value", keyValue);
    node.AppendChild( eAdd);


: :
264: sb.Append("</");  sb.Append(section);  sb.Append(">");
265:
266: node.InnerXml += sb.ToString();

Your example code never gives a value to the argument,
section, but from your example XML I'll guess it's
<appSettings> (although I don't see where you have
inserted the child node between the start and end
elements).


    XmlElement eAppSettings = xmlDoc.CreateElement( "appSettings");
    eAppSettings.AppendChild( eAdd);
    eRoot.AppendChild( eAppSettings);


These three statements essentially tie together the
entire configuration document's XML nodes.

It looks like you own (because you want to own?) the
entire configuration file, but I'll also point out that
in the .NET Framework's System.Configuration namespace
are classes automatically supporting this configuration
schema to read a config file from "application.exe.config"
or "web.config".

Using the built-in configuration file support allows you
to create the element,

    <add name="key" value="keyValue" />

in a single statement like this,

    ConfigurationSettings.AppSettings[ key] = keyValue;

with the default NameValueSectionHandler.



Derek Harmon


0
loresayer (275)
9/3/2004 12:39:19 AM
Thanks,
Dave

"Derek Harmon" wrote:

> "David Elliott" <Webbert@newsgroups.nospam> wrote in message news:2b5ej01vee1p82uoqo9a0os9g4alfia3g2@4ax.com...
> > I am looking to see if there is a better way to add a
> > new node / attribute than using XmlDocument.InnerXml.
> : :
> > but couldn't really see another way of doing this without
> > defining namespaces and the like.
> 
> The example XML you've given doesn't contain any namespaces,
> so why should you define one?
> 
> Have a look at the CreateElement() and CreateAttribute()
> methods of XmlDocument, and then AppendChild() on XmlNode
> (and remember that XmlDocument is an XmlNode, so it also
> allows you to AppendChild() nodes to it).
> 
> > the lines that I am wondering about are lines: 79, 227,
> > and 266
> 
> 
> 79: xmlDoc.InnerXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><configuration></configuration>";
> 
> If you set UTF-8 Encoding on an I/O Stream wrapped by an
> XmlTextWriter (or TextWriter), this XML declaration will
> be emitted for you automatically.
> 
> Here's how you'd create a custom XmlDeclaration for the
> XmlDocument (note that if you do Save this XML to a
> TextWriter-based class, its Encoding takes precedence).
> 
>     XmlDeclaration xmlDecl = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
> 
> Then you'd want to create your <configuration> element.
> 
>     XmlElement eRoot = xmlDoc.CreateElement( "configuration");
> 
> Finally, add the root element to XmlDocument and insert
> the XmlDeclaration before it,
> 
>     xmlDoc.AppendChild( eRoot);
>     xmlDoc.InsertBefore( xmlDecl, eRoot);
> 
> 
> : :
> 223: StringBuilder sb = new StringBuilder(500);
> 224: sb.Append("<add key=\"");  sb.Append(key); sb.Append("\" ");
> 225: sb.Append("value=\"");    sb.Append(keyValue); sb.Append("\" />");
> 226:
> 227: node.InnerXml += sb.ToString();
> 
>     XmlElement eAdd = xmlDoc.CreateElement( "add");
>     eAdd.SetAttribute( "key", key);
>     eAdd.SetAttribute( "value", keyValue);
>     node.AppendChild( eAdd);
> 
> 
> : :
> 264: sb.Append("</");  sb.Append(section);  sb.Append(">");
> 265:
> 266: node.InnerXml += sb.ToString();
> 
> Your example code never gives a value to the argument,
> section, but from your example XML I'll guess it's
> <appSettings> (although I don't see where you have
> inserted the child node between the start and end
> elements).
> 
> 
>     XmlElement eAppSettings = xmlDoc.CreateElement( "appSettings");
>     eAppSettings.AppendChild( eAdd);
>     eRoot.AppendChild( eAppSettings);
> 
> 
> These three statements essentially tie together the
> entire configuration document's XML nodes.
> 
> It looks like you own (because you want to own?) the
> entire configuration file, but I'll also point out that
> in the .NET Framework's System.Configuration namespace
> are classes automatically supporting this configuration
> schema to read a config file from "application.exe.config"
> or "web.config".
> 
> Using the built-in configuration file support allows you
> to create the element,
> 
>     <add name="key" value="keyValue" />
> 
> in a single statement like this,
> 
>     ConfigurationSettings.AppSettings[ key] = keyValue;
> 
> with the default NameValueSectionHandler.
> 
> 
> 
> Derek Harmon
> 
> 
> 
0
dave871 (679)
9/3/2004 12:01:02 PM
Reply:

Similar Artilces:

Can we create custom SSRS reports for CRM Online using Visual Stud
Can we use Visual Studio (or SQL Server Business Intelligence Development Studio) to create custom reports that can be uploaded to a CRM Online deployment, or even download standard reports and modify them? I don't know how that would work because I don't know if we would have access to the SQL Server database. Hi Michael, you can add new reports into CRM Online - as when you add Reports into any Microsoft CRM Deployment, the upload rountine replaces the Connection Details in the Report with the correct ones for the CRM Deployment you are uploading into. However whilst you can...

sumifs help
I have the following formula. =SUMIFS(Table1[2],$A$11:$A$22,$A38,$B$11:$B$22,$B38) It now needs to be changed to a formula that can handle text instead of numbers. How do i do it? Use Countif instead of Sumif from =SUMIF(Table1[2],$A$11:$A$22,$A38,$B$11:$B$22,$B38) to =CountIF(Table1[2],$A$11:$A$22,$A38,$B$11:$B$22,$B38) Do you really have a function Countifs with an "S" at the end? thie maybe an UDF that needs to be modified. -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this th...

Help !
I need to create a data input screen on excel where multiple users at the same time will use them & input data. This data then needs to be stored as a database as well, where i can use it to understand trends Thank you. and the question is ...? <abrahamsaj@gmail.com> wrote in message news:1132155054.927936.191640@z14g2000cwz.googlegroups.com... >I need to create a data input screen on excel where multiple users > at the same time will use them & input data. > This data then needs to be stored as a database as well, where i can > use it to understand trends >...

Help with this thing
It was working in the window "Transactions >> Sales >> Transactions of Sales", but exactly were publishing a Quotation, which i wanna print, more nevertheless was shut up to me network, then I closed the window and it threw several messages to me of error, and from that then it was blocked the quotation that was working. My question is as I can unblock this document? ...

Help with Outlook Setup!!!
I have XP Professional installed and Office XP Professional. I have several users setup for kids, as well as my admin account. I want to setup a Limited Account in addition to the Admin account for myself for daily use. Am I just suppose to pick a different account name and login password and then setup my MSN Messenger and Outlook POP email with same username and password that I used to setup the Admin account? I don't need to share any contacts or anything, I just setup the admin email in order to setup Outlook. I want to input my contact info etc., into the Limited account and use ...

HELP !!! I have a ARRAY Formula HELP !!!
Hello, Here is the ARRAY Formula I have and this is what I am using it for. The situation is that it worked 1 time and than not again. =INDEX(D48:K48,,MAX(IF(D48:K48<>"",COLUMN(D48:K48)))-COLUMN(D48)+1 Duty: I have a row of number that appear hourly (DOLLAR AMOUNTS), the numbe are anything from nothing to 10000. I want the hourly number to appea in specified cell. Here is an example. (I am using EXCEL 2000) Row D48:K48 answer in cell G2 1st hour D48 = $100.00 G2 Should be $100.00 2nd Hour D48 = $100.00 E48 = (nothing) G2 Should be (nothing) 3rd Hour D48 = $1...

exch 5.5 help
I am in a progress to upgrade Exchange 5.5 (on NT4) to Exhange 2k3 (on 2k3). I setup a test machine and upgrade the OS to w2k3. 1st I want to connect the 5.5 to AD, so I should install ADC. Can anyone tell me the steps? Frorestprep, domainprep, setup adc, and upgrade to exchange 2k3? If you run through the steps in the E2K3 deployment tools they will walk you through everything. -- Hope that helps. ------------------------- Jaclynn Hiranaka Enterprise Messaging Support This posting is provided "AS IS" with no warranties, and confers no rights. � 2004 Microsoft Corporation. Al...

How do I create a table with data selected via a pass through que.
I see the data using a pass thru select query but when I try to use the query in a separate make tabel query, I get an error message. Has anyone done this before? Thx. On Fri, 30 Nov 2007 14:33:00 -0800, kandamj <kandamj@discussions.microsoft.com> wrote: >I see the data using a pass thru select query but when I try to use the query >in a separate make tabel query, I get an error message. Has anyone done this >before? Thx. You may want to try saving the passthrough query, and base a new MakeTable query on that saved query. The passthrough query runs on the host, and ha...

Help with Formula Please 02-19-10
Need a Formula for the following: Data Table A B C D E F G H I 1 Tom A W 2 H 30 84 30 2 Peter A W 3 H 3 Nick B L 1 A 70 Columns F1:I3 from Data Table has break scores for each player. Below is the Result Table where I need to show a summary report for high breaks. I have no problem with Break as I use the Large function. I need a formula to insert in A1 and A2 to place the name for the corresponding breaks below. Result Table High Breaks A B Name Break 1 ...

help...help...help
I just installed Microsoft Office XP Professionaql with no problem. However, whenever I try to perform any task such as opening contacts area in order to create an entry, I receive a dialog box with Microsoft Outlook and a yellow exclamation point. Also, included in the dialog box are the words could not open the item, try again. Other information that might be important is that I use a pst file. The error message also occurs when I try to open the Contact folder from the folder list as well as when I try to perform any function. It was a clean install not an upgrade. Could you ...

Need help in data copying.
Hi I have an invoicing file in excel (Sheet1). I need to store the dat which is invoiced into another sheet. My Invoice Data starting from Ro 8 and column B to F (The first item is from B8-F8, second item i B9-F9). B-Item Code, C-Item Name, D-Qty, E-Price, F-Total. Once I print the invoice, I need to transfer the data to another shee (Sheet2) . When I create another invoice, the new data should be added below t the previous data in Sheet2. So that I can have all the items I sol in Sheet2. Can someone help me sending a macro for it??? I will be grateful to you. Thanks in advance Tom -...

Macro Help
Hi, I had alot of help yesterday from Jacob with the following macro, but am getting a 'run time error 13' when trying to run the macro, and i cannot see why. Any help much appreciated Sub OLApp() Dim objOL As Object, objApp As Object, lngRow As Long Set objOL = CreateObject("Outlook.Application") For lngRow = 9 To Cells(Rows.Count, "A").End(xlUp).Row If Range("E" & lngRow) = "" Then Set objApp = objOL.CreateItem(1) With objApp ..Subject = "Change Password for system" & Range("A" & lngRow)...

help me #2
how to restrict entering of same values or data in excel cell Hi if you mean the 'preventing of duplicate entries' you may check the following site http://www.cpearson.com/excel/NoDupEntry.htm -- Regards Frank Kabel Frankfurt, Germany mangesh khati wrote: > how to restrict entering of same values or data in excel > cell ...

Create and set up custom forms in OWA
Hey there! I read, that it is possible to convert custom forms to asp so that they can be used in OWA. Is there another tool than Microsoft Outlook HTML Form Converter to do the conversion-part? Do you know of an article that describes exactely how to set up such a form and where to install it etc. Like: What to do after I turned the Outlook custom form into an ActiveServerPage? Thanks for any help, Reto. ...

Problem with LeadTools CreateWindow inCFormView -Help !!!
Hi , I have been using LeadTools in Visual Studio 2005. I have a tabctrl and dialogs in each tab and developed using CFormView. So a tabCtrl is a child of CFromView and tab1 is a child of TabCtrl. I want to insert a LEAD control in one of the tabs .i.e, Dialog.I am unable to insert a leadcontrol but inserting a control in the view was easy.The problem is I am not able to get the HWND associated to a particular dialog which is super child of View. Can somebody help me in creating a lead control in the dialog configdlg .h LAnnotationWindow m_LAnnoWnd; FormView.cpp CMyTabCtrl m_myCtrlTab; ...

CString help
I'm looking at a website on CString Management: http://www.codeproject.com:80/string/cstringmgmt.asp In the section entitled, "CString to char * II: Using GetBuffer," the author stresses calling ReleaseBuffer after calling GetBuffer. Is this always necessary? I often use CString::GetBuffer when using CStrings in MessageBox dialogs like so: MessageBox(m_hWnd, cString.GetBuffer(0), lpTitle, MB_OK); Should I be adding a ReleaseBuffer after a MessageBox call? Should I be passing my string data to the MessageBox in another way? Regards, Joe > Is this always necessary?...

HelpProvider and HTML Help interaction
I have an application with a .chm help-file. But I have some questions about the behaviour of the help-window. I use a modal application window and I can start the help. The help windows appears but it is allways in foreground of my application window. I can set the input focus on my window, the help window becomes inactive but I cannot move my window over the help window. So I have to close the help window or minimize it or move it aside of my application window when I want to go on in my application. The other problem is when I minimize the help window and then open a dialog...

Creating E-R Diagrams In Visio Based On ACCESS Database
This is a multi-part message in MIME format. ------=_NextPart_000_0010_01C48BB9.47434CA0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I need to generate an E-R diagram for an ACCESS database that I have = setup. In ACCESS I have defined all of the table relationships using the = relationships tool. Now I am looking for a way to import that = relationships data into Visio to create a more formal and commented E-R = diagram. Any ideas? Thanks, Gary --=20 Gary Novosel Recursion (noun). See recursion. ------=_NextPart_000_0010_01C48BB...

Your Help is Appreciated
Dear all I am using MS Excel 2003 and I am trying to plot a graph/chart/graphical representation of the following: I would like to somehow plot : Time Price Meetings 16/09/2002 23/09/2002 225 27-Sep-02 30/09/2002 07/10/2002 14/10/2002 368 21/10/2002 23-Oct-02 28/10/2002 04/11/2002 354 11/11/2002 18/11/2002 235 25/11/2002 02/12/2002 I dont mind how the data is displayed but I envisaged some kind of bar chart to represent the prices and a line chart / crosses to indicate the dates of the meetings. Can anyone help with this or am I being stupid? Thanks for everything i...

Money-Changing Account number to handle Vanguard changes
Hi: Vanguard has changed the account numbers for its brokerage accounts. This has caused money to download brand new accounts with nothing in them and stop updating my old account numbered accounts. I changed the account numbers in Account Detail page but still not working. Anyone who has any info on what I'm missing please pass along. I cannot lose years and years of past data by just switching to the newly downloaded accounts. Greg PS: Microsoft Money Plus Premium, most recent version On the old accounts, turn off on-line updates. You should then be able to merge the old accoun...

bcc help
can't seem to send mail to bcc? I copied e-mail addresses from an excel spreadsheet and pasted the into the bcc header. I made sure there was coma between each. I entered the form letter and "from" and "to" and "subject" fields an sent the mail. The "to" received the mail but the bcc did NOT receive the mail. What did I do wrong ----------------------------------------------- ~~ Message posted from http://www.ExcelTip.com ~~View and post usenet messages directly from http://www.ExcelForum.com ...

Duplicate playlists are created
When I created a playlist folder it was created one such playlist, but sometime later I found that another one being the same name was created. As matter of fact all playlist folders so far created are now their duplicate folders. How come this is happening? ...

Rules Wizard Help
I have a rule in the Rules Wizard that forwards on an email to distribution list that is received from a certain person. I would like to have a rule that forwards on this email, but I woul like to forward it with some set text as well. For example, the email shows after being forwarded by the rule: > ---------- > From: Person1 > Sent: Friday, February 20, 2004 6:52:37 AM > To: DistributionList > Subject: DISCOVERER SHOULD NOW BE AVAILABLE > Auto forwarded by a Rule > > DISCOVERER SHOULD NOW BE AVAILABLE However, after I would like it to forward some text as ...

Excel 2003 hangs calculating cells from a Excel XP created Document
I have an excel document that was created in Excel XP, and it opens fine in Excel XP. When I try to open it in Excel 2003, it tries to go thru 'calculating cells'. It hangs at 5% on a mid range laptop and 25% on a high end desktop. Is there a fomula converter or something I cna run on the file to get it to open in Excel 2003? James Bates Excel 2002 and 2003 use the same file format so it's not an issue of converting formulas. Rather it would seem to be something it 2003's configuration. In your place I'd see what happens when the workbook is opened in a 'pure...

More help with formula
I need 2 formulas for the following: Problem 1: Columns "c" thru "g" contain numbers from 1 thru 100. If th numbers is those columns are 50 or less then I the sum to go in on column; then the sum of numbers between 51 to 100 to go into anothe column. Problem 2: Columns "c" thru "g" contain numbers from 1 thru 100. If th individual number 1-100 is used (3 times, 4 times, 5 times, etc.) tota the I need to show the number of times it was used in the columns. For example: If 1 is used 5 times in columns C thru G then the numbe is 5; the same with 2, th...