Joe Tyman
Joe Tyman

Reputation: 1417

Weird Array issue

So I am writing a C# console application. I have a text file that I want to send to a database. The plan is to have multiple text files and only one insert. Everything seems to go fine for the first line. Once I get to the 2nd line the array thinks it only has a length of 2.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace UKImporter
{
class Program
{
    static void Main(string[] args)
    {
        string[] lines = System.IO.File.ReadAllLines(@"C:\out\output.txt");
        System.Console.WriteLine("Contents of writeLines2.txt =:");

        foreach (string line in lines)
        {
            string sellername, sku, date1, quantity1, date2, asin, date3, date4, FNSKU;
            char[] tabs = { '\t', '\t', '\t', '\t', '\t', '\t', '\t', '\t',  };
            string[] words = line.Split(tabs);
            sellername = words[0];
            sku = words[1];
            date1 = words[2];
            quantity1 = words[3];
            date2 = words[4];
            asin = words[5];
            date3 = words[6];
            date4 = words[7];
            FNSKU = words[8];
            Console.WriteLine("\t" + line);
            UKDataBLL u = new UKDataBLL();
            //u.AddToDatabase(sku, DateTime.Now, Convert.ToInt16(quantity1), DateTime.Now, asin, DateTime.Now, DateTime.Now, FNSKU);

            foreach (string s in words)
            {
                System.Console.WriteLine(s);
            }

        }

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();

    }
}
}

Edit Here is some text of the file

A2LQ9QFN82X636 ACD_fivecrowns 6/1/11 5:30 0 6/1/11 5:30 B00000IV35 6/1/11 5:30 6/1/11 5:30 X0000PGTT9

A2LQ9QFN82X63 ACD_caylus_magna_carta 6/1/11 5:30 0 6/1/11 5:30 B000N3SOUM 6/1/11 5:30 6/1/11 5:30 X0000PGM23

A2LQ9QFN82X63 AMX_JrSpaceHelmet-LBL 6/1/11 5:30 0 6/1/11 5:30 B0008F6WMM 6/1/11 5:30 6/1/11 5:30 X0000PQBUL

Upvotes: 1

Views: 156

Answers (4)

Wim Haanstra
Wim Haanstra

Reputation: 5998

I dont really see why you need to specify all those tab characters in the split method.

Just do something like this:

foreach (string line in lines)
{
    string[] columns= line.Split('\t');
    if (columns.Length != 9) // Or how many colums the file should have.
        continue; // Line probably not valid

    // Now access all the columns of the line by using 
    // columns[0], columns[1], etc
}

Upvotes: 1

billinkc
billinkc

Reputation: 61201

Using the above code, I created a simple output file step that met your intended structure and your code does correctly parse the file out. Your issue appears to be based on the data

    string[] content = new string[] { "a\tb\tc\td\te\tf\tg\th\ti", "a\tb\tc\td\te\tf\tg\th\ti" };
    System.IO.File.WriteAllLines(@"C:\sandbox\output.txt", content);

Upvotes: 2

Nick Harrison
Nick Harrison

Reputation: 937

The tabs parameter to the split only needs to have one tab character. You are telling it all of the possible values to split on. As written, you are telling it to split on a tab or a tab or and so on.

It is possible that the second line is not in the correct format.

Can you send a copy of a couple of lines from the import file?

Upvotes: 1

Henk Holterman
Henk Holterman

Reputation: 273169

You only need

 string[] words = line.Split('\t');

And then you have to verify that the contents and your operation match, a crude idea:

 System.Diagnostics.Trace.Assert (words.Count == 9);

Upvotes: 3

Related Questions