Solved

How to convert an XML input field for a C# console application to a deciamal value for a fixed length field with leading zeros?

Posted on 2010-08-26
3
480 Views
Last Modified: 2013-12-17
I am writing my first C# console application using Visual Studio 2005. Do you know how I could rewrite the following C# code "IF statement" so that the amount field is displayed as a numeric value with an explicit decimal point?

An example of one of my daily input files is as follows:

Assuming the input amount field has the following dollar value with an implicit decimal and the output should contain leading zeros with an explicit decimal point and has a field length of 10,
how would you revise the following IF statement?

  if (reader.Name == "csc:amount")
                    {
                        //sw.WriteLine("GROUP_FIELD_NAME:CheckAmount");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());

Input field:      <csc:amount>0000000100</csc:amount>

Output fields: GROUP_FIELD_NAME:CheckAmount
                      GROUP_FIELD_VALUE:0000001.00

-------------------------------
<?xml version="1.0"?>
<csc:CIndex_File
    xmlns:csc="http://c.com/xml/CIndex_File">
<csc:header>
    <csc:version>1.0</csc:version>
    <csc:customer_name>              </csc:customer_name>
    <csc:request_id>MD </csc:request_id>
    <csc:creation_date>20100805</csc:creation_date>
    <csc:creation_time>084027</csc:creation_time>
    <csc:creation_host>hbd-chvcore</csc:creation_host>
    <csc:content_type>CHECK</csc:content_type>
    <csc:item_count>2</csc:item_count>
    <csc:image_file_name>J.img</csc:image_file_name>
    <csc:input_request_file></csc:input_request_file>
</csc:header>
<csc:item>
    <csc:processing_date>20100805</csc:processing_date>
    <csc:item_sequence_number>000000000000001</csc:item_sequence_number>
    <csc:account_number>00000000000000000005 </csc:account_number>
    <csc:check_number>000000000000001</csc:check_number>
    <csc:amount>0000000100</csc:amount>
    <csc:routing_transit>000000007</csc:routing_transit>
    <csc:bank_number>0002</csc:bank_number>
    <csc:transaction_code></csc:transaction_code>
    <csc:data1></csc:data1>
    <csc:data2></csc:data2>
    <csc:data3></csc:data3>
    <csc:userField></csc:userField>
    <csc:image_offset>0000000000</csc:image_offset>
    <csc:image_length>0000016685</csc:image_length>
    <csc:image_side>A</csc:image_side>
</csc:item>
<csc:item>
    <csc:processing_date>20100805</csc:processing_date>
    <csc:item_sequence_number>000000000000002</csc:item_sequence_number>
    <csc:account_number>00000000000000000005</csc:account_number>
    <csc:check_number>000000000000002</csc:check_number>
    <csc:amount>0000000200</csc:amount>
    <csc:routing_transit>000000007</csc:routing_transit>
    <csc:bank_number>0002</csc:bank_number>
    <csc:transaction_code></csc:transaction_code>
    <csc:data1></csc:data1>
    <csc:data2></csc:data2>
    <csc:data3></csc:data3>
    <csc:userField></csc:userField>
    <csc:image_offset>0000000000</csc:image_offset>
    <csc:image_length>0000016685</csc:image_length>
    <csc:image_side>A</csc:image_side>
</csc:item>
</csc:CheckVision_Index_File>

My program is as follows:

using System;
using System.Xml;
using System.IO;
namespace ReadXml1
{
     class Class1
     {        
         static void Main(string[] args)
         {
            int i = 0;
            string[,] arr1 = new string[1000,19];
            int iCheckNumber = 0;
           
            XmlTextReader reader = new XmlTextReader("C:\\rbc.xml");
     
            StreamWriter sw = new StreamWriter("C:\\output.txt");

            while (reader.Read())
             
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (reader.Name == "csc:check_number")
                    {
                        iCheckNumber = iCheckNumber + 1;
                        //sw.WriteLine("COMMENT: CHECK NUMBER # {0}", iCheckNumber);
                        //sw.WriteLine("GROUP_FIELD_NAME:CheckNumber");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());
                        arr1[i,0] = "COMMENT: CHECK NUMBER #" + iCheckNumber;
                        arr1[i,1] = "GROUP_FIELD_NAME:CheckNumber";
                        arr1[i,2] = "GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString();        
                    }
                    if (reader.Name == "csc:routing_transit")
                    {
                        arr1[i,3] = "GROUP_FIELD_NAME:RoutingTransit";
                        arr1[i,4] = "GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString();
                        arr1[i,5] = "GROUP_FIELD_NAME:BankName";
                        arr1[i,6] = "GROUP_FIELD_VALUE:RBC BANK";

                        //sw.WriteLine("GROUP_FIELD_NAME:RoutingTransit");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());
                        //sw.WriteLine("GROUP_FIELD_NAME:BankName");
                        //sw.WriteLine("GROUP_FIELD_VALUE:RBC BANK");
                    }
                    if (reader.Name == "csc:account_number")
                    {
                        //sw.WriteLine("GROUP_FIELD_NAME:BankAccountNo");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());                        
                        arr1[i,7] = "GROUP_FIELD_NAME:BankAccountNo";
                        arr1[i,8] = "GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString();
                    }
                    if (reader.Name == "csc:amount")
                    {
                        //sw.WriteLine("GROUP_FIELD_NAME:CheckAmount");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());
                        //sw.WriteLine("GROUP_FIELD_NAME:CpscNo");
                        //sw.WriteLine("GROUP_FIELD_VALUE:00000000");
                        arr1[i,9] = "GROUP_FIELD_NAME:CheckAmount";
                        arr1[i,10] = "GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString();
                        arr1[i,11] = "GROUP_FIELD_NAME:CpscNo";
                        arr1[i,12] = "GROUP_FIELD_VALUE:00000000";                        
                    }
                    if (reader.Name == "csc:processing_date")
                    {
                        //sw.WriteLine("GROUP_FIELD_NAME:CheckPaidDate");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());
                        //sw.WriteLine("GROUP_FIELD_NAME:OfficeNo");
                        //sw.WriteLine("GROUP_FIELD_VALUE:000");
                        arr1[i,13] = "GROUP_FIELD_NAME:CheckPaidDate";
                        arr1[i,14] = "GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString();
                        arr1[i,15] = "GROUP_FIELD_NAME:OfficeNo";
                        arr1[i,16] = "GROUP_FIELD_VALUE:000";  
                    }
                    if (reader.Name == "csc:image_offset")
                    {
                        //sw.WriteLine("GROUP_OFFSET:" + reader.ReadElementContentAsString());
                        arr1[i,17] = "GROUP_OFFSET:" + reader.ReadElementContentAsString();
                    }
                    if (reader.Name == "csc:image_length")
                    {
                        //sw.WriteLine("GROUP_LENGTH:" + reader.ReadElementContentAsString());
                        arr1[i,18] = "GROUP_LENGTH:" + reader.ReadElementContentAsString();
                        i++;
                    }                    
                }            
            }

            for (int iter = 0; iter < i; iter++)
            {
                for (int j = 0; j < 19; j++)
                {
                    sw.WriteLine(arr1[iter,j]);
                }
            }
            sw.Close();
            reader.Close();    
         }                  
     }
}

My output file would look like the following:

COMMENT: CHECK NUMBER #1
GROUP_FIELD_NAME:CheckNumber
GROUP_FIELD_VALUE:000000000000001
GROUP_FIELD_NAME:RoutingTransit
GROUP_FIELD_VALUE:000000007
GROUP_FIELD_NAME:BankName
GROUP_FIELD_VALUE:RBC BANK
GROUP_FIELD_NAME:BankAccountNo
GROUP_FIELD_VALUE:00000000000000000005
GROUP_FIELD_NAME:CheckAmount
GROUP_FIELD_VALUE:0000001.00
GROUP_FIELD_NAME:CpscNo
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:CheckPaidDate
GROUP_FIELD_VALUE:20100805
GROUP_FIELD_NAME:OfficeNo
GROUP_FIELD_VALUE:000
GROUP_OFFSET:0000000000
GROUP_LENGTH:0000016685
COMMENT: CHECK NUMBER #2
GROUP_FIELD_NAME:CheckNumber
GROUP_FIELD_VALUE:000000000000002
GROUP_FIELD_NAME:RoutingTransit
GROUP_FIELD_VALUE:000000007
GROUP_FIELD_NAME:BankName
GROUP_FIELD_VALUE:RBC BANK
GROUP_FIELD_NAME:BankAccountNo
GROUP_FIELD_VALUE:00000000000000000005
GROUP_FIELD_NAME:CheckAmount
GROUP_FIELD_VALUE:0000002.00
GROUP_FIELD_NAME:CpscNo
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:CheckPaidDate
GROUP_FIELD_VALUE:20100805
GROUP_FIELD_NAME:OfficeNo
GROUP_FIELD_VALUE:000
GROUP_OFFSET:0000000000
GROUP_LENGTH:0000016685
0
Comment
Question by:zimmer9
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 27

Expert Comment

by:nmarun
ID: 33534346
Here's how you can print it in the way you want.
Arun

string strVal = "000000200";
string newStrVal = strVal.Substring(0, strVal.Length - 2) + "." + strVal.Substring(strVal.Length - 2);
Console.WriteLine(newStrVal);

Open in new window

0
 
LVL 27

Accepted Solution

by:
nmarun earned 500 total points
ID: 33534378
You can make the above logic as a method and just pass the input value to the method.
arr1[i,9] = "GROUP_FIELD_NAME:CheckAmount";
arr1[i,10] = "GROUP_FIELD_VALUE:" + GetFormattedValue(reader.ReadElementContentAsString());
private string GetFormattedValue(string strVal)
{
      return strVal.Substring(0, strVal.Length - 2) + "." + strVal.Substring(strVal.Length - 2);
}
0
 

Author Comment

by:zimmer9
ID: 33534732
Where would you place the method GetFormattedValue in the following program?

using System;
using System.Xml;
using System.IO;
namespace ReadXml1
{
     class Class1
     {        
         static void Main(string[] args)
         {
            int i = 0;
            string[,] arr1 = new string[1000,19];
            int iCheckNumber = 0;
           
            XmlTextReader reader = new XmlTextReader("C:\\rbc.xml");
     
            StreamWriter sw = new StreamWriter("C:\\output.txt");

            while (reader.Read())
             
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (reader.Name == "csc:check_number")
                    {
                        iCheckNumber = iCheckNumber + 1;
                        //sw.WriteLine("COMMENT: CHECK NUMBER # {0}", iCheckNumber);
                        //sw.WriteLine("GROUP_FIELD_NAME:CheckNumber");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());
                        arr1[i,0] = "COMMENT: CHECK NUMBER #" + iCheckNumber;
                        arr1[i,1] = "GROUP_FIELD_NAME:CheckNumber";
                        arr1[i,2] = "GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString();        
                    }
                    if (reader.Name == "csc:routing_transit")
                    {
                        arr1[i,3] = "GROUP_FIELD_NAME:RoutingTransit";
                        arr1[i,4] = "GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString();
                        arr1[i,5] = "GROUP_FIELD_NAME:BankName";
                        arr1[i,6] = "GROUP_FIELD_VALUE:RBC BANK";

                        //sw.WriteLine("GROUP_FIELD_NAME:RoutingTransit");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());
                        //sw.WriteLine("GROUP_FIELD_NAME:BankName");
                        //sw.WriteLine("GROUP_FIELD_VALUE:RBC BANK");
                    }
                    if (reader.Name == "csc:account_number")
                    {
                        //sw.WriteLine("GROUP_FIELD_NAME:BankAccountNo");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());                        
                        arr1[i,7] = "GROUP_FIELD_NAME:BankAccountNo";
                        arr1[i,8] = "GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString();
                    }
                    if (reader.Name == "csc:amount")
                    {
                        //sw.WriteLine("GROUP_FIELD_NAME:CheckAmount");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());
                        //sw.WriteLine("GROUP_FIELD_NAME:CpscNo");
                        //sw.WriteLine("GROUP_FIELD_VALUE:00000000");
                        arr1[i,9] = "GROUP_FIELD_NAME:CheckAmount";
                        arr1[i,10] = "GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString();
                        arr1[i,11] = "GROUP_FIELD_NAME:CpscNo";
                        arr1[i,12] = "GROUP_FIELD_VALUE:00000000";                        
                    }
                    if (reader.Name == "csc:processing_date")
                    {
                        //sw.WriteLine("GROUP_FIELD_NAME:CheckPaidDate");
                        //sw.WriteLine("GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString());
                        //sw.WriteLine("GROUP_FIELD_NAME:OfficeNo");
                        //sw.WriteLine("GROUP_FIELD_VALUE:000");
                        arr1[i,13] = "GROUP_FIELD_NAME:CheckPaidDate";
                        arr1[i,14] = "GROUP_FIELD_VALUE:" + reader.ReadElementContentAsString();
                        arr1[i,15] = "GROUP_FIELD_NAME:OfficeNo";
                        arr1[i,16] = "GROUP_FIELD_VALUE:000";  
                    }
                    if (reader.Name == "csc:image_offset")
                    {
                        //sw.WriteLine("GROUP_OFFSET:" + reader.ReadElementContentAsString());
                        arr1[i,17] = "GROUP_OFFSET:" + reader.ReadElementContentAsString();
                    }
                    if (reader.Name == "csc:image_length")
                    {
                        //sw.WriteLine("GROUP_LENGTH:" + reader.ReadElementContentAsString());
                        arr1[i,18] = "GROUP_LENGTH:" + reader.ReadElementContentAsString();
                        i++;
                    }                    
                }            
            }

            for (int iter = 0; iter < i; iter++)
            {
                for (int j = 0; j < 19; j++)
                {
                    sw.WriteLine(arr1[iter,j]);
                }
            }
            sw.Close();
            reader.Close();    
         }                  
     }
}
0

Featured Post

Forrester Webinar: xMatters Delivers 261% ROI

Guest speaker Dean Davison, Forrester Principal Consultant, explains how a Fortune 500 communication company using xMatters found these results: Achieved a 261% ROI, Experienced $753,280 in net present value benefits over 3 years and Reduced MTTR by 91% for tier 1 incidents.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Summary Displaying images in RichTextBox is a common requirement with limited solutions available. Pasting through clipboard or embedding into RTF content only support static images.  This article describes how to insert Windows control objects int…
Recently while returning home from work my wife (another .NET developer) was murmuring something. On further poking she said that she has been assigned a task where she has to serialize and deserialize objects and she is afraid of serialization. Wha…
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question