提问者:小点点

C#分隔到tab分隔


如何将空格分隔更改为制表符分隔。

因为[LD端口02 CSTID f7sc67:Sorts complete.]有很大的空间间隔。

所以我不能一分为二!

List<string> add_list = new List<string>();
List<string> ok_list = new List<string>();
IEnumerable<String> lines = File.ReadLines("C:\\Users\\USER\\Downloads\\1231231231.log");

foreach (string line in lines)
{
    add_list.Add(line);
}

foreach (string row in add_list)
{
    var data = row.Split(' ');
    Console.WriteLine(data);
}

数据:

00002 00:00:50 Normal   LD Port 02 CSTID F7SC67  : Sorts Complete.
00003 00:00:57 Error    CompletedCST [0] .
00004 00:00:59 Normal   LD Port 02 CSTID F7SC67: Log Off OK
00005 00:01:08 Normal   LD Port 08 CSTID F7S248  : Sorts Complete.

我想要的是:

2,00:00:50,Normal,LD Port 02 CSTID F7SC67  : Sorts Complete.
3,00:00:57,Error,CompletedCST [0] .
4,00:00:59,Normal,LD Port 02 CSTID F7SC67: Log Off OK
5,00:01:08,Normal,LD Port 08 CSTID F7S248  : Sorts Complete.

Edit(by@chase):OP不想只按空格拆分--这就是为什么他们的代码是错误的。 它们的最终结果应该是What I want:中提到的结果--其中每一项都用逗号分隔,并且每一项都是明显不同的。 data:中提到了实现此结果的输入


共1个答案

匿名用户

请尝试以下操作:

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


namespace ConsoleApplication4
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.txt";
         static void Main(string[] args)
        {
            List<List<string>> data = GetFixedWidth(FILENAME);
        }
         static List<List<string>> GetFixedWidth(string filename)
         {
             int[] startPosition = { 0, 6, 15, 24 }; 
             StreamReader reader = new StreamReader(filename);
             string line = "";
             int length = 0;
             List<List<string>> data = new List<List<string>>();
             while ((line = reader.ReadLine()) != null)
             {
                 line = line.Trim();
                 if(line.Length > 0)
                 {
                     List<string> rowList = new List<string>();
                     data.Add(rowList);
                     for (int i = 0; i < startPosition.Length; i++)
                     {
                         if (line.Length > startPosition[i])
                         {
                             if (i == startPosition.Length - 1)
                             {
                                 string[] splitData = line.Substring(startPosition[i]).Split(new char[] { ':' });
                                 foreach (string split in splitData)
                                 {
                                     rowList.Add(split.Trim());
                                 }
                             }
                             else
                             {
                                 length = startPosition[i + 1] - startPosition[i];
                                 rowList.Add(line.Substring(startPosition[i], length).Trim());
                             }
                         }
                     }
                 }
             }

             return data;
         }
    }


}