Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找csv文件中每列的最大长度_C#_Asp.net_.net_Linq - Fatal编程技术网

C# 查找csv文件中每列的最大长度

C# 查找csv文件中每列的最大长度,c#,asp.net,.net,linq,C#,Asp.net,.net,Linq,因此,我试图在控制台应用程序中呈现csv文档。但是,由于其中的文本大小不同,因此输出的格式不可呈现 为了演示它,我尝试计算每列文本的最大长度,然后在该列的剩余文本中添加空格,以便每列中的字符长度相等 我试着计算角色数,但似乎不知道如何继续下去 var file = File.ReadAllLines(@"E:\File.csv"); var lineList = file.Select(x => x.Split(',').ToList()).ToList(); int maxColumn

因此,我试图在控制台应用程序中呈现csv文档。但是,由于其中的文本大小不同,因此输出的格式不可呈现

为了演示它,我尝试计算每列文本的最大长度,然后在该列的剩余文本中添加空格,以便每列中的字符长度相等

我试着计算角色数,但似乎不知道如何继续下去

var file = File.ReadAllLines(@"E:\File.csv");
var lineList = file.Select(x => x.Split(',').ToList()).ToList();
int maxColumn = lineList.Select(x => x.Count).Max(x => x);
List<int> maxElementSize = new List<int>();
for (int i = 0; i < maxColumn; i++)
{
    //Some Logic    
}
var file=file.ReadAllLines(@“E:\file.csv”);
var lineList=file.Select(x=>x.Split(',').ToList()).ToList();
int maxColumn=lineList.Select(x=>x.Count).Max(x=>x);
List maxElementSize=新列表();
对于(int i=0;i

任何帮助都将不胜感激。

初始化您的列表,然后在您的行上循环,并在该行内循环您的列:

for (i = 0; i < lineList.Count; i++)
{
    maxElementSize[i] = 0;
}
for (i = 0; i < lineList.Count; i++)
{
    for (j = 0; j < maxColumn; j++)
    {
        if(lineList[i][j].Length > maxElementSize[j])
           maxElementSize[j] = lineList[i][j].Length
    }
}
for(i=0;imaxElementSize[j])
maxElementSize[j]=lineList[i][j]。长度
}
}

下面是一个示例控制台应用程序,用于获取每列的最大字符长度:

 static void Main(string[] args)
{
    string CSVPath = @"D:\test.csv";
    string outputText = "";

    using (var reader = File.OpenText(CSVPath))
    {
        outputText = reader.ReadToEnd();
    }

    var colSplitter = ',';
    var rowSplitter = new char[] { '\n' };

    var rows = (from row in outputText.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries)
             let cols = row.Split(colSplitter)
             from col in cols
             select new { totalCols = cols.Count(), cols = cols }).ToList();

    int[] maxColLengths = new int[rows.Max(o => o.totalCols)];

    for (int i = 0; i < rows.Count; i++)
    {
        for (int j = 0; j < rows[i].cols.Count(); j++)
        {
            int curLength = rows[i].cols[j].Trim().Length;

            if (curLength  > maxColLengths[j])
                maxColLengths[j] = curLength;
        }
    }

    Console.WriteLine(string.Join(", ", maxColLengths));
}
static void Main(字符串[]args)
{
字符串CSVPath=@“D:\test.csv”;
字符串outputText=“”;
使用(var reader=File.OpenText(CSVPath))
{
outputText=reader.ReadToEnd();
}
var colSplitter=',';
var rowSplitter=新字符[]{'\n'};
var rows=(来自outputText.Split中的行(rowSplitter、StringSplitOptions.RemoveEmptyEntries)
设cols=row.Split(colSplitter)
从col到cols
选择新的{totalCols=cols.Count(),cols=cols}).ToList();
int[]maxcollength=newint[rows.Max(o=>o.totalCols)];
for(int i=0;i最大卷曲长度[j])
最大长度[j]=卷曲长度;
}
}
Console.WriteLine(string.Join(“,”,maxColleLength));
}

希望这有帮助。

尝试使用嵌套for循环:

var inputLines = File.ReadAllLines(@"E:\File.csv");   
Dictionary<int,int> dictIndexLenght = new Dictionary<int,int>();
foreach(var line in inputLines)
{
    List<string> columList =  line.Split(',').ToList();
    for (int i = 0; i < columList.Count; i++)
    {
        int tempVal = 0;
        if(dictIndexLenght.TryGetValue(i,out tempVal))
        {
            if(tempVal<columList[i].Length)
            {
                dictIndexLenght[i]=columList[i].Length;
            }                  
        }
        else
            dictIndexLenght[i]=columList[i].Length;
    }

}
var inputLines=File.ReadAllLines(@“E:\File.csv”);
Dictionary Dictionary IndexLenght=新字典();
foreach(输入行中的var行)
{
List columnlist=line.Split(',').ToList();
for(int i=0;iif(tempVal我会这样做,非常类似于un lucky的答案,只使用
列表而不是
字典。我添加了虚拟数据进行测试,但您可以看到读取文件的实际调用留在那里,因此您可以删除虚拟数据和读取它的行,它应该可以正常工作:

static void Main(string[] args)
{
    var fileLines = new List<string>
    {
        "Lorem, Ipsum, is, simply, dummy, text, of, the, printing, and, typesetting,",
        "industry., Lorem, Ipsum, has, been, the, industry's, standard, dummy, text,",
        "ever, since, the, 1500s, when, an, ",
        "unknown, printer, took, a, galley, of, type, and, scrambled, it, to, make,",
        "a, type, specimen, book.,",
        "It, has, survived, not, only, five, centuries, but, also, the, leap,",
        "into, electronic, typesetting, remaining, essentially, unchanged.,",
        "It, was, popularised, in, the, 1960s, with, the, release,",
        "of, Letraset, sheets, containing, Lorem, Ipsum, passages, and, more, ",
        "recently, with, desktop, publishing,",
        "software, like, Aldus, PageMaker, including, versions, of, Lorem, Ipsum."
    };

    var filePath = @"f:\public\temp\temp.csv";
    var fileLinesColumns = File.ReadAllLines(filePath).Select(line => line.Split(','));
    var colWidths = new List<int>();

    // Remove this line to use file data
    fileLinesColumns = fileLines.Select(line => line.Split(','));   

    // Get the max length of each column and add it to our list
    foreach (var fileLineColumns in fileLinesColumns)
    {
        for (int i = 0; i < fileLineColumns.Length; i++)
        {
            if (i > colWidths.Count - 1)
            {
                colWidths.Add(fileLineColumns[i].Length);
            }
            else if (fileLineColumns[i].Length > colWidths[i])
            {
                colWidths[i] = fileLineColumns[i].Length;
            }
        }
    }

    // Write out our columns, padding each one to match the longest line
    foreach (var fileLineColumns in fileLinesColumns)
    {
        for (int i = 0; i < fileLineColumns.Length; i++)
        {
            Console.Write(fileLineColumns[i].PadRight(colWidths[i]));
        }

        Console.WriteLine();
    }

    Console.Write("\nDone!\nPress any key to exit...");
    Console.ReadKey();
}
static void Main(字符串[]args)
{
var fileLines=新列表
{
“Lorem,Ipsum,简单地说就是虚拟、文本、of、the、打印和排版,”,
“行业、知识产权、Ipsum、过去、过去、行业、标准、虚拟、文本,”,
“从,从,到,16世纪,当,”,
“未知,打印机,带,a,厨房,of,type,and,scramed,it,to,make,”,
“a、类型、样本、书籍”,
“它不仅经历了五个世纪,而且还经历了一次飞跃,”,
“输入、电子、排版、保留、基本不变。”,
“它,是,在,1960年代,随着,发行,”,
“of,Letraset,sheets,containing,Lorem,Ipsum,passions,and,more,”,
“最近,随着,桌面,出版,”,
“软件,如Aldus、PageMaker,包括、版本、Lorem、Ipsum。”
};
var filePath=@“f:\public\temp\temp.csv”;
var fileLinesColumns=File.ReadAllLines(filePath);
var colWidths=新列表();
//删除此行以使用文件数据
fileLinesColumns=fileLines.Select(line=>line.Split(',');
//获取每列的最大长度并将其添加到列表中
foreach(fileLinesColumns中的var fileLineColumns)
{
对于(int i=0;icolWidths.Count-1)
{
添加(fileLineColumns[i].Length);
}
else if(fileLineColumns[i].Length>coldwiths[i])
{
colWidths[i]=fileLineColumns[i]。长度;
}
}
}
//写出我们的专栏,将每一行填入最长的一行
foreach(fileLinesColumns中的var fileLineColumns)
{
对于(int i=0;i
输出


将CSV拆分为
,“
有些幼稚,因为值可能是一个包含逗号的带引号的字符串。如果您不想以后浪费时间,请使用现有的经验证的库来解析CSV。如果a列最多12个字符,B列最多14个字符,是否希望a列填充为12个字符,B列填充为14?@spender您是否有任何现有的库可以帮助我实现这一点?@mjwills这基本上就是我想要实现的。每列的最大列长度。我听说了一些好消息,您可能希望添加一个检查,检查行的长度是否超过
j
,以避免出现带有锯齿a的
IndexOutOfRangeException
rrays。在开始时为每一行(而不是每一列)设置
maxElementSize[i]
似乎很奇怪。@mjwills我没有这样做。仅仅因为我使用了一个变量名,这并不意味着
i
意味着行…maxElementSize是一个di
static void Main(string[] args)
{
    var fileLines = new List<string>
    {
        "Lorem, Ipsum, is, simply, dummy, text, of, the, printing, and, typesetting,",
        "industry., Lorem, Ipsum, has, been, the, industry's, standard, dummy, text,",
        "ever, since, the, 1500s, when, an, ",
        "unknown, printer, took, a, galley, of, type, and, scrambled, it, to, make,",
        "a, type, specimen, book.,",
        "It, has, survived, not, only, five, centuries, but, also, the, leap,",
        "into, electronic, typesetting, remaining, essentially, unchanged.,",
        "It, was, popularised, in, the, 1960s, with, the, release,",
        "of, Letraset, sheets, containing, Lorem, Ipsum, passages, and, more, ",
        "recently, with, desktop, publishing,",
        "software, like, Aldus, PageMaker, including, versions, of, Lorem, Ipsum."
    };

    var filePath = @"f:\public\temp\temp.csv";
    var fileLinesColumns = File.ReadAllLines(filePath).Select(line => line.Split(','));
    var colWidths = new List<int>();

    // Remove this line to use file data
    fileLinesColumns = fileLines.Select(line => line.Split(','));   

    // Get the max length of each column and add it to our list
    foreach (var fileLineColumns in fileLinesColumns)
    {
        for (int i = 0; i < fileLineColumns.Length; i++)
        {
            if (i > colWidths.Count - 1)
            {
                colWidths.Add(fileLineColumns[i].Length);
            }
            else if (fileLineColumns[i].Length > colWidths[i])
            {
                colWidths[i] = fileLineColumns[i].Length;
            }
        }
    }

    // Write out our columns, padding each one to match the longest line
    foreach (var fileLineColumns in fileLinesColumns)
    {
        for (int i = 0; i < fileLineColumns.Length; i++)
        {
            Console.Write(fileLineColumns[i].PadRight(colWidths[i]));
        }

        Console.WriteLine();
    }

    Console.Write("\nDone!\nPress any key to exit...");
    Console.ReadKey();
}