Kingsam3 Ответов: 1

Как я могу читать из XML и записывать в текстовый файл с помощью C# для вывода в качестве прикрепленного члена группы на банк и сохранения его в текстовый файл


Instructions
● Please thoroughly read the test before beginning
● We expect the test to be completed using C#
● Google may be used.
● We have included a DebitOrders.xml.txt input file. Please rename this to
DebitOrders.xml (by removing the.txt). This is the file that you must read your data
from.
● We have included a SampleOutput.txt file. This is only to give you an idea of what the
output could possible look like.
● Please provide a zipped (.zip) file of the source code (no binaries) and the resulting
output files for your application.
● Your application should be stable and should always exit gracefully
Summary
Read the data from the provided XML file (DebitOrders.xml) into flat files to be submitted to
the banks. A file for each bank should be created, so all the records for the same bank will
be in the same output file. The output files will contain details for every debit order to be
processed for that bank, as well as some header/summary data describing and counting all
the detail records.
Input File (DebitOrders.xml)
The xml file contains multiple records, each with the following nodes:
Element Description
<accountholder> First name and Surname of the account
holder
<accountnumber> Account number that needs to be debited
<accounttype> Type of account that needs to be debited
<bankname> Bank where the account is held
<branch> Branch where the account is held
<amount> Amount that needs to be debited, in rand
and cent
<date> Date that debit needs to happen
(mm/dd/yyyy)
Output File
File Name
The output file should be the full bank name, with a .txt extension.
File Header Record
Every file will have a single header record line at the top that summarizes the data in the file.
If we take the example of Beep Bank with 100 records to the value of R90998.10, the header
record will have the following data in one long string:
BEEP BANK 1000009099810
Element Description Pad char Pad side Length
Bank
name
First 16 characters of the Bank
name as per file name, padded
with spaces at the end if the
name is less than 16 characters
long. Convert to Uppercase.
[space] right 16
Record
count
Number of data records in the
file, depicted as a 3 character,
zero-left-padded string.
0 left 3
Total
value
Value (in cents) of all amounts in
the file, depicted as a 10
character, zero-left-padded
string.
0 left 10
Total Header Record Length 29
Detail Record Formatting
Every deduction that belongs to a bank will be written to that bank’s file, one per line. Each
detail record will be the same length. A detailed record example is explained here: If we take
the example of a deduction of R100.72 on 31 December 2012 from Maria Smith’s Credit
Card , account number 123456 for the branch in Durban , the detail record in the output file
will be represented as the following:
MSmith 123456 CC Durban 0010072 31201212
Element Description Pad char Pad side Length
Initials First initial of account holder,
depicted as a single character.
N/A N/A 1
Surname Surname (spaces removed) of the
account holder depicted as a 15
character, space-right-padded
string.
All spaces to be removed from
surnames like “Le Roux” before
padding.
[space] right 15
AccountNo Account number to be debited,
depicted as a 14 character,
space-right-padded string.
[space] right 14
Account
Type
A mnemonic/abbreviation for the
account type depicted as a 3
character, space-right-padded
string using these lookups:
● CH = Cheque account
● SAV = Savings account
● CR = Credit card
● OTH = Any other account
type
[space] right 3
Branch Branch name where account is
held, depicted as a 10 character,
space-right-padded string
[space] right 10
Amount Amount, in cents, to be deducted
from account, depicted as a 7
character, zero-left-padded string.
0 left 7
Date Debit date depicted as a 8
character string representing the
date in the format ddyyyymm
N/A N/A 8
Total Detail Record Length 58
Detail Record Sorting
All detail records must be sorted in ascending order based on the amount, and then in
ascending order based on the Account Holder’s surname. So where two records of the same
amount is found, these records must be sorted based on the surname of the account holder.
File Ending
The file should end with a CRLF (carriage return line feed) after the final record.
Optional items
● Create a detail record class that can be populated from the file, and used to write the
formatted string to the output file.
● Give the user progress feedback while processing the file.
● Give a summary of the files produced with values and counts
----DebitOrder.xml--------------------

<pre><debitorders>
  <deduction>
    <accountholder>Georgina Sinclair</accountholder>
	<accountnumber>408999703657</accountnumber>
	<accounttype>cheque</accounttype>
	<bankname>First National Bank</bankname>
	<branch>Fourways</branch>
	<amount>275.00</amount>
	<date>12/01/2012</date>
  </deduction>
  <deduction>
    <accountholder>Zachary Whitehead</accountholder>
	<accountnumber>409122372301</accountnumber>
	<accounttype>cheque</accounttype>
	<bankname>ABSA</bankname>
	<branch>Irene</branch>
	<amount>70.25</amount>
	<date>12/01/2012</date>
  </deduction>
  <deduction>
    <accountholder>Toby Henderson</accountholder>
	<accountnumber>401255489873</accountnumber>
	<accounttype>cheque</accounttype>
	<bankname>First National Bank</bankname>
	<branch>Edenvale</branch>
	<amount>181.03</amount>
	<date>12/13/2012</date>
  </deduction>
  <deduction>
    <accountholder>Katherine Cooke</accountholder>
	<accountnumber>409155874935</accountnumber>
	<accounttype>savings</accounttype>
	<bankname>ABSA</bankname>
	<branch>Southdowns</branch>
	<amount>975.89</amount>
	<date>01/01/2013</date>
  </deduction>
  <deduction>
    <accountholder>Bradley James</accountholder>
	<accountnumber>409254998</accountnumber>
	<accounttype>savings</accounttype>
	<bankname>ABSA</bankname>
	<branch>Melville</branch>
	<amount>207.74</amount>
	<date>12/09/2012</date>
  </deduction>
  <deduction>
    <accountholder>Sophie Lane</accountholder>
	<accountnumber>409771987</accountnumber>
	<accounttype>savings</accounttype>
	<bankname>ABSA</bankname>
	<branch>Roodepoort</branch>
	<amount>207.74</amount>
	<date>12/31/2012</date>
  </deduction>
</debitorders>




--- выход--------

Первый Национальный B0020000045603
GSinclair 408999703657 ч Форвейз 002750001122012
THenderson 401255489873 ч Эденвале 001810313122012

0040000146162 Абса
ZWhitehead 409122372301 ч 000702501122012 Ирен
KCooke 409155874935 SAVSouthdowns009758901012013
BJames 409254998 SAVMelville 002077409122012
Слейн 409771987 SAVRoodepoort002077431122012

Что я уже пробовал:


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace DebitOrders
{
    class Program
    {
       

  
        static void Main(string[] args)
        {
            string onlyContent = string.Empty;

            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(@"C:\zms\DebitOrders\DebitOrders\DebitOrders.xml");

            var debitorders = xdoc.SelectNodes("debitorders/deduction");
            for (int i = 0; i < debitorders.Count; i++)
            {
                //onlyContent += string.Format("\n bankname", i);
                onlyContent += string.Format("\n{0}:", i);
                foreach (XmlNode node in debitorders[i].ChildNodes)
                    onlyContent += string.Format("{0},", node.InnerText);
            }


            File.WriteAllText(@"C:\zms\DebitOrders\DebitOrders\DebitOrders.txt", onlyContent);

        }
        }
      }
  
//string path=Server.MapPath("~/service/AppValues.xml");

//XDocument document = XDocument.Load(path);

CHill60

А что не так с кодом, который вы пробовали?

[no name]

И что же вы ожидаете от нас услышать?
У нас нет ваших файлов.
Мы не видим вашего экрана.
Мы не можем видеть ваш выходной файл.
Это не наш тест.

Patrice T

А в вашем коде что-то не так ? проблема ?

Patrice T

То, что вы хотите, не проблема.

1 Ответов

Рейтинг:
0

Member 10992268

пожалуйста, позвоните по методу, показанному ниже, надеюсь, что он работает спасибо

static public string XMLRead()
    {
        string onlyContent = "";
        DataSet ds = new DataSet();
        string Strpath = @"C:\zms\DebitOrders\DebitOrders";
        try
        {
            ds.ReadXml(Strpath + "\\DebitOrders.xml");
            if (ds.Tables.Count != 0)
            {
                DataTable dtXml = ds.Tables[0];

                foreach (DataRow dr in dtXml.Rows)
                {
                    onlyContent += dr[0].ToString();
                }
            }
        }
        catch
        {
            return Environment.MachineName;
        }
        return onlyContent;
    }