C#DataTable去掉空白行.C#导入excel总是有几行空白的,如何去除

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#DataTable去掉空白行.C#导入excel总是有几行空白的,如何去除相关的知识,希望对你有一定的参考价值。

    第一种方法:空白行的来源是excel文件中存在空白行

    将excel中的空白行直接删除即可

    第二中方法:在导入完成后再删除

    判断Datatable中行是否为空

    如果为空,则调用Rows.Remove(datarow)即可删除该行

参考技术A 循环DataTable.Rows,判断如果行dr里每个列值都是空的,就 DataTable.Rows.Remove(dr) 参考技术B DataView dv = dataTable.DefaultView;
dv.RowFilter = @"(序号 <> '' or 序号 is not null) ";
dataTable = dv.ToTable();
参考技术C 还是从数据源控制比较好,导入之前,先判断excel里面是不是有为空的,为空的就跳过,不导入,这样比较好。本回答被提问者采纳

带有浮点数据的 C 数组在 Objective C 类中崩溃 (EXC_BAD_ACCESS)

【中文标题】带有浮点数据的 C 数组在 Objective C 类中崩溃 (EXC_BAD_ACCESS)【英文标题】:C array with float data crashing in Objective C class (EXC_BAD_ACCESS) 【发布时间】:2012-11-22 00:20:21 【问题描述】:

我正在做一些音频处理,因此混合了一些 C 和 Objective C。我设置了一个类来处理我的 OpenAL 接口和我的音频处理。我已将类后缀更改为

.mm

...如 Core Audio 书中的描述以及许多在线示例。

我有一个在 .h 文件中声明并在 .mm 文件中实现的 C 风格函数:

static void granularizeWithData(float *inBuffer, unsigned long int total) 

    // create grains of audio data from a buffer read in using ExtAudioFileRead() method.

    // total value is: 235377
    float tmpArr[total];

    // now I try to zero pad a new buffer:
    for (int j = 1; j <= 100; j++) 
        tmpArr[j] = 0;
        // CRASH on first iteration EXC_BAD_ACCESS (code=1, address= ...blahblah)
    

奇怪???是的,我完全不知道为什么这不起作用,但以下方法起作用:

    float tmpArr[235377];

    for (int j = 1; j <= 100; j++) 
        tmpArr[j] = 0;
        // This works and index 0 - 99 are filled with zeros
    

有没有人知道为什么我不能声明一个大小为“total”且具有 int 值的数组?我的项目使用 ARC,但我不明白为什么这会导致问题。当我调试时打印'total'的值时,它实际上是正确的值。如果有人有任何想法,请帮忙,这让我发疯!

【问题讨论】:

编译器不支持变长数组? .mm 是针对目标 C++ 的,不是吗? C++ 中没有 VLA。 【参考方案1】:

问题是该数组被分配在堆栈上而不是堆上。堆栈大小是有限的,因此您不能在其上分配 235377*sizeof(float) 字节数组,它太大了。改用堆:

float *tmpArray = NULL;

tmpArray = (float *) calloc(total, sizeof(float)); // allocate it

// test that you actually got the memory you asked for

if (tmpArray)

  // use it

  free(tmpArray); // release it

请注意,您始终负责释放在堆上分配的内存,否则会产生泄漏。

在您的第二个示例中,由于大小是先验已知的,因此编译器将该空间保留在程序的静态空间中的某处,从而允许它工作。但是在您的第一个示例中,它必须即时执行,这会导致错误。但无论如何,在确保您的第二个示例有效之前,您应该尝试访问数组的所有元素,而不仅仅是前 100 个。

【讨论】:

如果这是 C++,如果您无法分配您请求的内存,则抛出异常。如果这是 C/Objective-C,这也是一个致命问题的标志,你会想要exit(-1) 或类似的(NSException 等)。良好的错误处理习惯将帮助您摆脱困境。此外,如果这是 C,则不需要转换 calloc() 的结果。 @Jack,感谢您的详细回答!我知道我在做一些愚蠢的事情,但就是不记得何时分配内存。 +100。 @AlexReynolds 感谢您的提示。由于这是 C/Objective-C 的混合体,我会在异常处理方面做得更好。

以上是关于C#DataTable去掉空白行.C#导入excel总是有几行空白的,如何去除的主要内容,如果未能解决你的问题,请参考以下文章

C#OPEN XML:从EXCEL向DATATABLE获取数据时,空单元格被跳过

怎么去除datatable 中一列的重复值【急】

excel 如何用函数去掉空白行 !!求救,郁闷一天了!!

Excel打开文件时,会同时打开一个空白Excel窗口,怎么去掉?

Xcode: 如何修复线程 5: EXC_BREAKPOINT (code=1, subcode=0x10025c76c)

一道C语言题:整理字符串,将字符串中前导和后随的空白符删除,字符串中间连续的多个空白符只保留一个,