如何用cc++读取csv文件中指定的某一行

如何用cc++读取csv文件中指定的某一行,第1张

csv文件其实就是用逗号分割列,然后用回车换行的普通的文本文件

比如你要读第n行

就从头读文件,一直遇到第n-1个回车换行,后面一直到新的换行为止

的就是第n行的内容了

csv文件即逗号分隔值文件。

逗号分隔值(Comma-Separated

Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。

CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

要用C语言读取CSV,首先需要确定文件中定义的字符分隔值,以及每一行各个列的元素格式。

如果所有的元素格式相同,那么可以每行一个一维数组,所有行组成一个二维数组,逐个元素进行读取。

如果元素格式不同,可以按照元素类型,构建一个结构体,每行读到一个结构体变量中,所有行组成一个结构体数组。

下面根据两种情况,按照分隔符为逗号(,),分别举一个例子:

文件名设定为incsv,每行10个元素。

一、所有元素均相同类型,比如int型。

#include <stdioh>

int main()

{

FILEfp;

int a[100][10];//定义一个足够大的数组来存储。

int line = 0;

int c, i;

fp = fopen("incsv", "r"); // 以文本方式打开。

if(fp == NULL) return -1; // 打开文件失败。

while(1)

{

i=0;//列标记清零。

while(1)

{

fscanf(fp, "%d", &a[line][i]);//从文件中读取一个元素。

c = getchar();//读取下一个字符,可能是分隔符,换行符或文件结尾。

if(c == '\n'||c == EOF)break;//读完一行,或者到文件结尾,退出读取。

i++;

}

line ++;

if(c == EOF) break;

}

fclose(fp); //关闭文件。

//以下循环用来打印所有读到的值。

for(i = 0; i < line; i ++)

{

for(c = 0; c < 10; c ++)

printf("%d ", a[i][c]);

printf("\n");

}

}

二、每行元素不同。

比如共三列,第一列是int型,第二列是字符串,第三列是float型。

如果分隔符不是空白字符,或者字符串元素中可能存在除分隔符外的其它空白字符,在读取字符串的时候是不能用fscanf函数的。

定义结构体如下

strcut data

{

int a;

char s[100]; //根据实际要求,定义足够大的字符数组。

float f;

};

读取代码如下:

#include <stdioh>

int main()

{

FILEfp;

strcut data a[100];//定义一个足够大的结构体一维数组来存储。

int line = 0;

int c,i;

fp = fopen("incsv", "r"); // 以文本方式打开。

if(fp == NULL) return -1; // 打开文件失败。

while(1)

{

fscanf(fp, "%d", &a[line]a);//从文件中读取第一个元素。

c = getchar();//读取分隔符。

//接下来要读取字符串,需要逐个字符读入,直到出现分隔符为止。

i = 0;

while(1)

{

a[line]s[i] = getchar();//读入一个字符。

if(a[line]s[i] == ',')//发现分隔符

{

a[line]s[i]='\0'; //赋值字符串结束符。

break;//退出读取字符串。

}

i++;

}

//由于在读字符串的时候分隔符已经被读取,这里不需要读分隔符,而是直接读下一个元素。

fscanf(fp, "%f", &a[line]f);//从文件中读取最后一个元素。

c = getchar();//读取下一个字符,可能是换行符或文件结尾。

line ++;

if(c == EOF) break;//到文件结尾,退出读取。

}

fclose(fp); //关闭文件。

//以下循环用来打印所有读到的值。

for(i = 0; i < line; i ++)

{

printf("%d %s %f\n", a[i]a, a[i]s, a[i]f);

}

}

给你一段VBnet读取csv文件的代码把。

Imports SystemIO

Imports SystemCollectionsGeneric

Module Module1

    Public CSV数据 As List(Of List(Of String))

    ''' <summary>

    ''' 从指定路径的文件读取内容,并分析出其中每行含有分隔符的数据,存到CSV数据中。

    ''' <para>调用的时候使用CSV数据(5)(0)表示第6条记录的第1个数据</para>

    ''' </summary>

    ''' <param name="文件路径">必需。一个[String]表达式。要读取的文件路径。</param>

    ''' <returns>返回是否读取成功</returns>

    ''' <remarks></remarks>

    Public Function 读取(ByVal 文件路径 As String) As Boolean

        Dim 文件读取器 As StreamReader = New StreamReader(文件路径)

        Dim 语句 As String

        Dim t成功 As Boolean = True

        Dim 分隔符 As Char = ";"

        CSV数据 = New List(Of List(Of String))

        While Not 文件读取器EndOfStream

            Try

                语句 = 文件读取器ReadLine

                '分析语句后判断类型

                If 语句Contains(分隔符) Then

                    Dim array = 语句Split(分隔符)

                    If array IsNot Nothing Then

                        CSV数据Add(arrayToList())

                    End If

                End If

            Catch ex As Exception

                t成功 = False

            End Try

        End While

        Return t成功

    End Function

End Module

你上面的数据执行后,将会保存到一个List嵌套List的String组中。

自己转化为数字再进行 *** 作把。

Dim 数字 = ConvertToDecimal(CSV数据(5)(0))

以上就是关于如何用c/c++读取csv文件中指定的某一行全部的内容,包括:如何用c/c++读取csv文件中指定的某一行、关于C语言读CSV文件的问题、vb如何实时读取csv文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9612106.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存