Question

I have a text file with lines of text laid out like so

12345MLOL68
12345MLOL68
12345MLOL68

I want to read the file and add commas to the 5th point, 6th point and 9th point and write it to a different text file so the result would be.

12345,M,LOL,68
12345,M,LOL,68
12345,M,LOL,68

This is what I have so far

public static void ToCSV(string fileWRITE, string fileREAD)
{
    int count = 0;
    string x = "";

    StreamWriter commas = new StreamWriter(fileWRITE);
    string FileText = new System.IO.StreamReader(fileREAD).ReadToEnd();
    var dataList = new List<string>();
    IEnumerable<string> splitString = Regex.Split(FileText, "(.{1}.{5})").Where(s => s != String.Empty);

    foreach (string y in splitString)
    {
        dataList.Add(y);
    }


    foreach (string y in dataList)
    {
        x = (x + y + ",");

        count++;
        if (count == 3)
        {
            x = (x + "NULL,NULL,NULL,NULL");
            commas.WriteLine(x);
            x = "";
            count = 0;
        )
    }
    commas.Close();
}

The problem I'm having is trying to figure out how to split the original string lines I read in at several points. The line

IEnumerable<string> splitString = Regex.Split(FileText, "(.{1}.{5})").Where(s => s != String.Empty);

Is not working in the way I want to. It's just adding up the 1 and 5 and splitting all strings at the 6th char.

Can anyone help me split each string at specific points?

Was it helpful?

Solution

Simpler code:

public static void ToCSV(string fileWRITE, string fileREAD)
{
    string[] lines = File.ReadAllLines(fileREAD);
    string[] splitLines = lines.Select(s => Regex.Replace(s, "(.{5})(.)(.{3})(.*)", "$1,$2,$3,$4")).ToArray();
    File.WriteAllLines(fileWRITE, splitLines);
}

OTHER TIPS

Just insert at the right place in descending order like this.

string str = "12345MLOL68";
int[] indices = {5, 6, 9};

indices = indices.OrderByDescending(x => x).ToArray();

foreach (var index in indices)
{
    str = str.Insert(index, ",");
}

We're doing this in descending order because if we do other way indices will change, it will be hard to track it.

Here is the Demo

Why don't you use substring , example

 editedstring=input.substring(0,5)+","+input.substring(5,1)+","+input.substring(6,3)+","+input.substring(9);

This should suits your need.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top