zimmer9
asked on
How to rewrite a C# console application so that the records are written out in their proper order?
I am writing my first C# application. It's a console application using Visual Studio 2005.
My input file is named C:\\rbc.xml
My output file is name C:\\output.txt
I wrote the following C# code but my output records are not written out in the proper sequence.
Do you know how I could modify the following C# code to get the output records to be written in their proper order?
C# code:
using System;
using System.Xml;
using System.IO;
namespace ReadXml1
{
class Class1
{
static void Main(string[] args)
{
int iCheckNumber = 0;
XmlTextReader reader = new XmlTextReader("C:\\rbc.xml ");
StreamWriter sw = new StreamWriter("C:\\output.t xt");
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:Check Number");
sw.WriteLine("GROUP_FIELD_ VALUE:" + reader.ReadElementContentA sString()) ;
}
if (reader.Name == "csc:routing_transit")
{
sw.WriteLine("GROUP_FIELD_ NAME:Routi ngTransit" );
sw.WriteLine("GROUP_FIELD_ VALUE:" + reader.ReadElementContentA sString()) ;
sw.WriteLine("GROUP_FIELD_ NAME:BankN ame");
sw.WriteLine("GROUP_FIELD_ VALUE:HARR IS BANK");
}
if (reader.Name == "csc:account_number")
{
sw.WriteLine("GROUP_FIELD_ NAME:BankA ccountNo") ;
sw.WriteLine("GROUP_FIELD_ VALUE:" + reader.ReadElementContentA sString()) ;
}
if (reader.Name == "csc:amount")
{
sw.WriteLine("GROUP_FIELD_ NAME:Check Amount");
sw.WriteLine("GROUP_FIELD_ VALUE:" + reader.ReadElementContentA sString()) ;
sw.WriteLine("GROUP_FIELD_ NAME:CpscN o");
sw.WriteLine("GROUP_FIELD_ VALUE:0000 0000");
}
if (reader.Name == "csc:processing_date")
{
sw.WriteLine("GROUP_FIELD_ NAME:Check PaidDate") ;
sw.WriteLine("GROUP_FIELD_ VALUE:" + reader.ReadElementContentA sString()) ;
sw.WriteLine("GROUP_FIELD_ NAME:Offic eNo");
sw.WriteLine("GROUP_FIELD_ VALUE:000" );
}
if (reader.Name == "csc:image_offset")
{
sw.WriteLine("GROUP_OFFSET :" + reader.ReadElementContentA sString()) ;
}
if (reader.Name == "csc:image_length")
{
sw.WriteLine("GROUP_LENGTH :" + reader.ReadElementContentA sString()) ;
}
}
}
sw.Close();
reader.Close();
}
}
}
My input file is named C:\\rbc.xml and it's contents are as follows:
-------------------------- ---------- -----
<?xml version="1.0" ?>
- <csc:CheckVision_Index_Fil e xmlns:csc="https://c.com/xml/CheckVision_Index_File">
- <csc:header>
<csc:version>1.0</csc:vers ion>
<csc:customer_name />
<csc:request_id>MD</csc:re quest_id>
<csc:creation_date>2010080 5</csc:cre ation_date >
<csc:creation_time>084027< /csc:creat ion_time>
<csc:creation_host>hbd-chv core</csc: creation_h ost>
<csc:content_type>CHECK</c sc:content _type>
<csc:item_count>2</csc:ite m_count>
<csc:image_file_name>J.img </csc:imag e_file_nam e>
<csc:input_request_file />
</csc:header>
- <csc:item>
<csc:processing_date>20100 805</csc:p rocessing_ date>
<csc:item_sequence_number> 0000000000 00001</csc :item_sequ ence_numbe r>
<csc:account_number>000000 0000000000 0005</csc: account_nu mber>
<csc:check_number>00000000 0000001</c sc:check_n umber>
<csc:amount>0000000100</cs c:amount>
<csc:routing_transit>00000 0007</csc: routing_tr ansit>
<csc:bank_number>0002</csc :bank_numb er>
<csc:transaction_code />
<csc:data1 />
<csc:data2 />
<csc:data3 />
<csc:userField />
<csc:image_offset>00000000 00</csc:im age_offset >
<csc:image_length>00000166 85</csc:im age_length >
<csc:image_side>A</csc:ima ge_side>
</csc:item>
- <csc:item>
<csc:processing_date>20100 805</csc:p rocessing_ date>
<csc:item_sequence_number> 0000000000 00002</csc :item_sequ ence_numbe r>
<csc:account_number>000000 0000000000 0005</csc: account_nu mber>
<csc:check_number>00000000 0000002</c sc:check_n umber>
<csc:amount>0000000200</cs c:amount>
<csc:routing_transit>00000 0007</csc: routing_tr ansit>
<csc:bank_number>0002</csc :bank_numb er>
<csc:transaction_code />
<csc:data1 />
<csc:data2 />
<csc:data3 />
<csc:userField />
<csc:image_offset>00000000 00</csc:im age_offset >
<csc:image_length>00000166 85</csc:im age_length >
<csc:image_side>A</csc:ima ge_side>
</csc:item>
</csc:CheckVision_Index_Fi le>
My output file is name C:\\output.txt SHOULD BE AS FOLLOWS:
COMMENT: CHECK NUMBER # 1
GROUP_FIELD_NAME:CheckNumb er
GROUP_FIELD_VALUE: 000000000000001
GROUP_FIELD_NAME:RoutingTr ansit
GROUP_FIELD_VALUE: 000000007
GROUP_FIELD_NAME:BankName
GROUP_FIELD_VALUE:RBC BANK
GROUP_FIELD_NAME:BankAccou ntNo
GROUP_FIELD_VALUE: 00000000000000000001
GROUP_FIELD_NAME:CheckAmou nt
GROUP_FIELD_VALUE: 0000001523
GROUP_FIELD_NAME:CpcsNo
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:CheckPaid Date
GROUP_FIELD_VALUE:08/05/10
GROUP_FIELD_NAME:OfficeNo
GROUP_FIELD_VALUE:000
GROUP_OFFSET:0000000000
GROUP_LENGTH:0000016685
COMMENT: CHECK NUMBER # 2
GROUP_FIELD_NAME:CheckNumb er
GROUP_FIELD_VALUE: 000000904216438
GROUP_FIELD_NAME:RoutingTr ansit
GROUP_FIELD_VALUE: 000000007
GROUP_FIELD_NAME:BankName
GROUP_FIELD_VALUE:RBC BANK
GROUP_FIELD_NAME:BankAccou ntNo
GROUP_FIELD_VALUE: 00000000000000000001
GROUP_FIELD_NAME:CheckAmou nt
GROUP_FIELD_VALUE: 00000022.06
GROUP_FIELD_NAME:CpcsNo
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:CheckPaid Date
GROUP_FIELD_VALUE:08/05/10
GROUP_FIELD_NAME:OfficeNo
GROUP_FIELD_VALUE:000
GROUP_OFFSET:0000000000
GROUP_LENGTH:0000016685
My output records currently appear in the following sequence WHICH IS WRONG:
GROUP_FIELD_NAME:CheckPaid Date
GROUP_FIELD_VALUE:20100805
GROUP_FIELD_NAME:OfficeNo
GROUP_FIELD_VALUE:000
GROUP_FIELD_NAME:BankAccou ntNo
GROUP_FIELD_VALUE:00000000 0000000000 01
COMMENT: CHECK NUMBER # 1
GROUP_FIELD_NAME:CheckNumb er
GROUP_FIELD_VALUE:00000000 0000001
GROUP_FIELD_NAME:CheckAmou nt
GROUP_FIELD_VALUE:00000001 00
GROUP_FIELD_NAME:CpscNo
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:RoutingTr ansit
GROUP_FIELD_VALUE:00000000 7
GROUP_FIELD_NAME:BankName
GROUP_FIELD_VALUE:RBC BANK
GROUP_OFFSET:0000000000
GROUP_LENGTH:0000016685
GROUP_FIELD_NAME:CheckPaid Date
GROUP_FIELD_VALUE:20100805
GROUP_FIELD_NAME:OfficeNo
GROUP_FIELD_VALUE:000
GROUP_FIELD_NAME:BankAccou ntNo
GROUP_FIELD_VALUE:00000000 0000000000 01
COMMENT: CHECK NUMBER # 2
GROUP_FIELD_NAME:CheckNumb er
GROUP_FIELD_VALUE:00000000 0000002
GROUP_FIELD_NAME:CheckAmou nt
GROUP_FIELD_VALUE:00000002 00
GROUP_FIELD_NAME:CpscNo
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:RoutingTr ansit
GROUP_FIELD_VALUE:00000000 7
GROUP_FIELD_NAME:BankName
GROUP_FIELD_VALUE:RBC BANK
GROUP_OFFSET:0000000000
GROUP_LENGTH:0000016685
My input file is named C:\\rbc.xml
My output file is name C:\\output.txt
I wrote the following C# code but my output records are not written out in the proper sequence.
Do you know how I could modify the following C# code to get the output records to be written in their proper order?
C# code:
using System;
using System.Xml;
using System.IO;
namespace ReadXml1
{
class Class1
{
static void Main(string[] args)
{
int iCheckNumber = 0;
XmlTextReader reader = new XmlTextReader("C:\\rbc.xml
StreamWriter sw = new StreamWriter("C:\\output.t
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_
sw.WriteLine("GROUP_FIELD_
}
if (reader.Name == "csc:routing_transit")
{
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
}
if (reader.Name == "csc:account_number")
{
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
}
if (reader.Name == "csc:amount")
{
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
}
if (reader.Name == "csc:processing_date")
{
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
}
if (reader.Name == "csc:image_offset")
{
sw.WriteLine("GROUP_OFFSET
}
if (reader.Name == "csc:image_length")
{
sw.WriteLine("GROUP_LENGTH
}
}
}
sw.Close();
reader.Close();
}
}
}
My input file is named C:\\rbc.xml and it's contents are as follows:
--------------------------
<?xml version="1.0" ?>
- <csc:CheckVision_Index_Fil
- <csc:header>
<csc:version>1.0</csc:vers
<csc:customer_name />
<csc:request_id>MD</csc:re
<csc:creation_date>2010080
<csc:creation_time>084027<
<csc:creation_host>hbd-chv
<csc:content_type>CHECK</c
<csc:item_count>2</csc:ite
<csc:image_file_name>J.img
<csc:input_request_file />
</csc:header>
- <csc:item>
<csc:processing_date>20100
<csc:item_sequence_number>
<csc:account_number>000000
<csc:check_number>00000000
<csc:amount>0000000100</cs
<csc:routing_transit>00000
<csc:bank_number>0002</csc
<csc:transaction_code />
<csc:data1 />
<csc:data2 />
<csc:data3 />
<csc:userField />
<csc:image_offset>00000000
<csc:image_length>00000166
<csc:image_side>A</csc:ima
</csc:item>
- <csc:item>
<csc:processing_date>20100
<csc:item_sequence_number>
<csc:account_number>000000
<csc:check_number>00000000
<csc:amount>0000000200</cs
<csc:routing_transit>00000
<csc:bank_number>0002</csc
<csc:transaction_code />
<csc:data1 />
<csc:data2 />
<csc:data3 />
<csc:userField />
<csc:image_offset>00000000
<csc:image_length>00000166
<csc:image_side>A</csc:ima
</csc:item>
</csc:CheckVision_Index_Fi
My output file is name C:\\output.txt SHOULD BE AS FOLLOWS:
COMMENT: CHECK NUMBER # 1
GROUP_FIELD_NAME:CheckNumb
GROUP_FIELD_VALUE: 000000000000001
GROUP_FIELD_NAME:RoutingTr
GROUP_FIELD_VALUE: 000000007
GROUP_FIELD_NAME:BankName
GROUP_FIELD_VALUE:RBC BANK
GROUP_FIELD_NAME:BankAccou
GROUP_FIELD_VALUE: 00000000000000000001
GROUP_FIELD_NAME:CheckAmou
GROUP_FIELD_VALUE: 0000001523
GROUP_FIELD_NAME:CpcsNo
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:CheckPaid
GROUP_FIELD_VALUE:08/05/10
GROUP_FIELD_NAME:OfficeNo
GROUP_FIELD_VALUE:000
GROUP_OFFSET:0000000000
GROUP_LENGTH:0000016685
COMMENT: CHECK NUMBER # 2
GROUP_FIELD_NAME:CheckNumb
GROUP_FIELD_VALUE: 000000904216438
GROUP_FIELD_NAME:RoutingTr
GROUP_FIELD_VALUE: 000000007
GROUP_FIELD_NAME:BankName
GROUP_FIELD_VALUE:RBC BANK
GROUP_FIELD_NAME:BankAccou
GROUP_FIELD_VALUE: 00000000000000000001
GROUP_FIELD_NAME:CheckAmou
GROUP_FIELD_VALUE: 00000022.06
GROUP_FIELD_NAME:CpcsNo
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:CheckPaid
GROUP_FIELD_VALUE:08/05/10
GROUP_FIELD_NAME:OfficeNo
GROUP_FIELD_VALUE:000
GROUP_OFFSET:0000000000
GROUP_LENGTH:0000016685
My output records currently appear in the following sequence WHICH IS WRONG:
GROUP_FIELD_NAME:CheckPaid
GROUP_FIELD_VALUE:20100805
GROUP_FIELD_NAME:OfficeNo
GROUP_FIELD_VALUE:000
GROUP_FIELD_NAME:BankAccou
GROUP_FIELD_VALUE:00000000
COMMENT: CHECK NUMBER # 1
GROUP_FIELD_NAME:CheckNumb
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:CheckAmou
GROUP_FIELD_VALUE:00000001
GROUP_FIELD_NAME:CpscNo
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:RoutingTr
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:BankName
GROUP_FIELD_VALUE:RBC BANK
GROUP_OFFSET:0000000000
GROUP_LENGTH:0000016685
GROUP_FIELD_NAME:CheckPaid
GROUP_FIELD_VALUE:20100805
GROUP_FIELD_NAME:OfficeNo
GROUP_FIELD_VALUE:000
GROUP_FIELD_NAME:BankAccou
GROUP_FIELD_VALUE:00000000
COMMENT: CHECK NUMBER # 2
GROUP_FIELD_NAME:CheckNumb
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:CheckAmou
GROUP_FIELD_VALUE:00000002
GROUP_FIELD_NAME:CpscNo
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:RoutingTr
GROUP_FIELD_VALUE:00000000
GROUP_FIELD_NAME:BankName
GROUP_FIELD_VALUE:RBC BANK
GROUP_OFFSET:0000000000
GROUP_LENGTH:0000016685
Your fields are appearing in the text file in the same order they appear in the XML file. The reader just reads sequentially through the XML file, so when it hits your If conditions, the first one that evaluates to True is the processing date, not the check number.
ASKER
How true.
Do you know how I can rewrite the C# code to write out the records in their proper sequence?
Do you know how I can rewrite the C# code to write out the records in their proper sequence?
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
If I use the approach of working with an array, then my first 3 records are attained as follows from my code:
if (reader.Name == "csc:check_number")
{
iCheckNumber = iCheckNumber + 1;
sw.WriteLine("COMMENT: CHECK NUMBER # {0}", iCheckNumber);
sw.WriteLine("GROUP_FIELD_ NAME:Check Number");
sw.WriteLine("GROUP_FIELD_ VALUE:" + reader.ReadElementContentA sString()) ;
}
How could the above lines of C# code be convered to assign their values to an array?
I realize the second element is HARD CODED but the first and third elements of the array contain variable data.
ar(0) = ??? ("COMMENT: CHECK NUMBER # {0}", iCheckNumber);
ar(1)="GROUP_FIELD_NAME:Ch eckNumber"
ar(2)= ??? ("GROUP_FIELD_VALUE:" + reader.ReadElementContentA sString()) ;
if (reader.Name == "csc:check_number")
{
iCheckNumber = iCheckNumber + 1;
sw.WriteLine("COMMENT: CHECK NUMBER # {0}", iCheckNumber);
sw.WriteLine("GROUP_FIELD_
sw.WriteLine("GROUP_FIELD_
}
How could the above lines of C# code be convered to assign their values to an array?
I realize the second element is HARD CODED but the first and third elements of the array contain variable data.
ar(0) = ??? ("COMMENT: CHECK NUMBER # {0}", iCheckNumber);
ar(1)="GROUP_FIELD_NAME:Ch
ar(2)= ??? ("GROUP_FIELD_VALUE:" + reader.ReadElementContentA