Our Man in Bananas
Our Man in Bananas

Reputation: 5977

split a string into 2 arrays based on 2 delimiters

I want to split a string into 2 arrays, one with the text that's delimited by vbTab (I think it's \t in c#) and another string with the test thats delimited by vbtab (I think it's \n in c#).

By searching I found this (StackOverFlow Question: 1254577):

string input = "abc][rfd][5][,][.";
string[] parts1 = input.Split(new string[] { "][" }, StringSplitOptions.None);
string[] parts2 = Regex.Split(input, @"\]\[");

but my string would be something like this:

aaa\tbbb\tccc\tddd\teee\nAccount\tType\tCurrency\tBalance\t123,456.78\nDate\tDetails\tAmount\n03NOV13\tTransfer\t9,999,999.00-\n02NOV13\t\Cheque\t125.00\nDebit Card Cash\t200.00

so in the above code input becomes:

string input = "aa\tbbb\tccc\tddd\teee\nAccount\tType\tPersonal Current Account\tCurrency\tGBP\tBalance\t123,456.78\nDate\tDetails\tAmount\n03NOV13\tTransfer\t9,999,999.00-\n02NOV13\t\Cheque\t125.00\nDebit Card Cash\t200.00\n30OCT13\tLoan Repayment\t1,234.56-\n\tType\t30-Day Notice Savings Account\tCurrency\tGBP\tBalance\t983,456.78\nDate\tDetails\tAmount\n03NOV13\tRepaid\t\250\n"

but how do I create one string array with everthing up to the first newline and another array that holds everything after?

Then the second one will have to be split again into several string arrays so I can write out a mini-statement with the account details, then showing the transactions for each account.

I want to be able to take the original string and produce something like this on A5 paper: enter image description here

Upvotes: 1

Views: 311

Answers (2)

Steve Clanton
Steve Clanton

Reputation: 4314

You can use a LINQ query:

        var cells = from row in input.Split('\n')
                    select row.Split('\t');

You can get just the first row using First() and the remaining rows using Skip(). For example:

        foreach (string s in cells.First())
        {
            Console.WriteLine("First: " + s);
        }

Or

        foreach (string[] row in cells.Skip(1))
        {
             Console.WriteLine(String.Join(",", row));
        }

Upvotes: 1

Troy
Troy

Reputation: 567

The code below should do what you requested. This resulted in part1 having 5 entries and part2 having 26 entries

string input = "aa\tbbb\tccc\tddd\teee\nAccount\tType\tPersonal Current Account\tCurrency\tGBP\tBalance\t123,456.78\nDate\tDetails\tAmount\n03NOV13\tTransfer\t9,999,999.00-\n02NOV13\t\Cheque\t125.00\nDebit Card Cash\t200.00\n30OCT13\tLoan Repayment\t1,234.56-\n\tType\t30-Day Notice Savings Account\tCurrency\tGBP\tBalance\t983,456.78\nDate\tDetails\tAmount\n03NOV13\tRepaid\t\250\n";

// Substring starting at 0 and ending where the first newline begins
string input1 = input.Substring(0, input.IndexOf(@"\n"));

/* Substring starting where the first newline begins
   plus the length of the new line  to the end */
string input2 = input.Substring(input.IndexOf(@"\n") + 2);

string[] part1 = Regex.Split(input1, @"\\t");
string[] part2 = Regex.Split(input2, @"\\t");

Upvotes: 1

Related Questions