-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
107 lines (99 loc) · 5.64 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RAKBank_Parser
{
class Program
{
static ParseRAKBankStatementResult ParseRAKBankStatement(string strFilePath)
{
ParseRAKBankStatementResult result = new ParseRAKBankStatementResult();
var strFileContent = System.IO.File.ReadAllText(strFilePath);
var strFileContentLines = strFileContent.Split(new char[] { '\n' });
result.strAccountName = strFileContentLines[3].Split(new char[] { ',' })[2];
result.strAccountNumber = strFileContentLines[4].Split(new char[] { '.' })[1].Split(new char[] { ']' })[0];
result.strBranchName = strFileContentLines[6].Split(new char[] { '[' })[1].Split(new char[] { ']' })[0];
result.d8From = Convert.ToDateTime(DateTime.ParseExact(strFileContentLines[7].Split(new char[] { ',' })[2], "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture));
result.d8To = Convert.ToDateTime(DateTime.ParseExact(strFileContentLines[8].Split(new char[] { ',' })[2], "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture));
string strCSVContent = string.Empty;
for (int i = 10; i < strFileContentLines.Length - 2; i++)
{
if (i == 10)
{
var Headers = strFileContentLines[i].Split(new char[] { ',' });
strCSVContent += $"EmptyHeader1,{Headers[1]},EmptyHeader2,{Headers[3]},{Headers[4]},{Headers[5]},{Headers[6]},{Headers[7]}{Environment.NewLine}";
}
else
{
strCSVContent += strFileContentLines[i] + Environment.NewLine;
}
}
var textReader = new System.IO.StringReader(strCSVContent);
var csvr = new CsvHelper.CsvReader(textReader);
csvr.Configuration.PrepareHeaderForMatch = (string header, int index) => header?.Trim();
csvr.Configuration.PrepareHeaderForMatch = (string header, int index) => header.Replace(" ", string.Empty);
result.CSVRecords = csvr.GetRecords<RAKBankCSVRecord>();
return result;
}
static List<BankRecord> GetBankRecordsFromRAKBankCSVRecords(IEnumerable<RAKBankCSVRecord> CSVRecords)
{
List<BankRecord> bankRecords = new List<BankRecord>();
foreach (var CSVRecord in CSVRecords)
{
var bankRecord = new BankRecord();
bankRecord.BankStatementSequence = bankRecords.Count + 1;
bankRecord.TransactionDate = Convert.ToDateTime(DateTime.ParseExact(CSVRecord.Date, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture));
bankRecord.ChequeNo = CSVRecord.ChequeNo;
bankRecord.BankDescription = CSVRecord.Description;
bankRecord.AmountInBaseCurrency = string.IsNullOrEmpty(CSVRecord.Withdrawal) ? Convert.ToDouble(CSVRecord.Deposit) : Convert.ToDouble(CSVRecord.Withdrawal) * -1;
bankRecord.Currency =
bankRecord.BankDescription.Contains("USD ") ? "USD" :
bankRecord.BankDescription.Contains("CAD ") ? "CAD" :
bankRecord.BankDescription.Contains("SAR ") ? "SAR" :
bankRecord.BankDescription.Contains("EUR ") ? "EUR" :
"AED";
try
{
bankRecord.AmountInOriginalCurrency = Convert.ToDouble(bankRecord.BankDescription.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.None)[2].Split(new[] { ' ' })[1]);
}
catch (Exception)
{
bankRecord.AmountInOriginalCurrency = bankRecord.AmountInBaseCurrency;
}
bankRecord.ExchangeRate = Math.Abs(bankRecord.AmountInBaseCurrency / bankRecord.AmountInOriginalCurrency);
bankRecords.Add(bankRecord);
}
return bankRecords;
}
static void WriteCSVFile(ParseRAKBankStatementResult varParseRAKBankStatementResult, string strFolder)
{
var strFileName = $"{varParseRAKBankStatementResult.strAccountName} - {varParseRAKBankStatementResult.strAccountNumber} ({varParseRAKBankStatementResult.d8From.ToString("ddMMyyyy")} - {varParseRAKBankStatementResult.d8To.ToString("ddMMyyyy")}).csv";
strFileName = System.IO.Path.Combine(strFolder, strFileName);
System.IO.TextWriter textWriter = System.IO.File.CreateText(strFileName);
var csvWriter = new CsvHelper.CsvWriter(textWriter);
varParseRAKBankStatementResult.bankRecords.Reverse();
csvWriter.WriteRecords(varParseRAKBankStatementResult.bankRecords);
textWriter.Flush();
textWriter.Close();
}
static void Main(string[] args)
{
//var strFilePath = @"D:\Downloads\Account_Transactions_CSV26-08-2018.csv";
var strFilePath = args[0];
var strFolderPath = System.IO.Path.GetDirectoryName(strFilePath);
ParseRAKBankStatementResult varParseRAKBankStatementResult = null;
try
{
varParseRAKBankStatementResult = ParseRAKBankStatement(strFilePath);
varParseRAKBankStatementResult.bankRecords = GetBankRecordsFromRAKBankCSVRecords(varParseRAKBankStatementResult.CSVRecords);
WriteCSVFile(varParseRAKBankStatementResult, strFolderPath);
}
catch (Exception ex)
{
System.Console.WriteLine($"Error: {ex.Message}");
}
}
}
}