大神帮忙看下这个是咋回事,用C语言读csv文件到数组,语法有问题,不知道是哪里错了?

1 CSV文件的内容如下:

代码能够成功读取csv文件,但是有个情况,在用C#代码读取之前,我用的是excel打开的csv,发现,如果用excel打开的csv文件的各列中的内容是完全展开的(最佳合适列宽度),那么csv能够完全读取。但是如果excel中的列内容不是最合适的宽度(列中的内容是“#”号),比如以上例子中的,索引能够读取,其他的就读取不了,这个怎么解决呢?

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

文件的使用可以大大简化代码并保证输入的正确性。而将文件用于输出时,其最大的优势在于可以将程序结构长期保存

文件是数据的抽象和集合

  • 文件是存储在辅助存储器上的数据序列

  • 文件是数据存储的一种形式

  • 文件的展现形态:文本文件和二进制文件

     组成文件的数据可以是ASCII编码,也可以是二进制编码
     
     本质上所有文件都是二进制形式存储
     
     形式上所有文件采用两种方式展示
    

文件一定有一个文件名,文件名的长度和命名规则因不同的操作系统而异

(2). 文件名的组成

文件名 = 主文件名.扩展名

主文件名:由用户根据OS的命名规则自行命名,并且要与其他文件加以区别
扩展名:根据文件类型对应专属的缩写,指定打开、操作该文件的应用程序

注:文件都是按文件名访问的

一方面通过主文件名指明访问对象
另一方面通过扩展名指定访问和处理文件的应用程序

文本文件:是纯文本,指只包含基本文本字符,由单一特定编码组成的文件

由于存在编码,文本文件也被看成是存储着的长字符串

最常见的文本文件是.txt文件
.py文件也是文本文件

二进制文件:除了文本文件之外的文件,直接由比特0和1组成,没有统一字符编码

一般存在由二进制0和1进行特定的组织结构,产生文件
不同的二进制文件需要借助不同的库进行不同的处理 
  • 文件是用来组织和管理一组相关数据的,而目录是用来组织和管理一组相关文件的
  • 目录又称为文件夹,可以包含文件,也可以包含其他目录

文件保存的位置称为路径

指从文件所在驱动器(盘符)开始描述文件的保存位置。

其中反斜杠\是盘符、目录、文件之间在WindowsOS下的分隔符。

②在Python程序中描述一个文件的路径方式

以下是在Windows平台表示形式

  1.  但是在字符串中,\是转义序列符,所有为了还原反斜杠分隔符的含义,使用两个\
     
    
  2. 使用r取消后续字符串中反斜杠的转义特性

是指从当前工作目录开始扫描文件的保存位置

每个运行的程序都有一个当前工作目录,又称cwd。
一般来说当前工作目录默认为应用程序的安装目录
通过Python语言自带的os库函数重新设置cwd

相对路径中的盘符直到当前工作目录部分都缺省了,系统默认从当前工作目录开始根据路径描述定位文件

“…”表示当前目录的上一级目录

通过绝对路径或相对路径找到文件,然后就是对文件进行操作,
文件操作的步骤:打开文件、读或写文件、关闭文件

1. 文件的打开和关闭

大多数文件都是长期保存在外部存储器的,需要操作时必须从外存调入内存,才能由CPU进行处理。
而打开操作就是将文件从外部存储器调入内存的过程,这个过程需要使用Python内置的open命令,并生成一个File对象

注:Python程序中,文件一旦打开都会和一个文件对象相关联,随后的文件操作都通过调用file对象的方法实现

文件对象名 = open(文件路径字符串,模式字符)

文件路径字符串可以采用:绝对路径、或相对路径
打开文件模式:指定打开文件类型和操作文件的方式
否,从EOF处开始追加写
否,从EOF处开始追加写
否,从EOF处开始追加写
否,从EOF处开始追加写


关键字with的功能是在不再需要访问文件后自动将文件关闭。

而open命令打开文件一定要通过调用close()方法进行关闭。
函数open()中的参数'test.txt'就是要打开的文件。函数open()返回的是打开文件的对象,第一行代码就是把文本文件 test.txt 打开,并将其对象保存在file_object变量中。

执行open命令打开文件之后,这个文件就被Python程序占用并调入内存,其后所有的读写操作都发生在内存,于此同时,其他任何程序都不能操作该文件

当读写操作结束后,必须将文件从内存保存到外存,这样做一方面将内存中文件的变化同步至外存,以便长期保存
也是为了释放Python程序对文件的占用,让其他应用程序能够操作文件

注:不允许对关闭的文件执行任何读写操作

读出文件所有内容并作为一个字符串返回

学号,平时成绩,期末成绩 学号,平时成绩,期末成绩

将读出文件中当前行,并以字符串的形式返回

每调用一次该函数,读取文件的一行内容
如果文件包含多行内容,配合for循环使用

以列表的形式返回整个文件的内容,其中一行对应一个列表元素

readlines()方法更简洁的方式按行读出整个文件内容,后续只要通过简单的列表遍历就可以取出任意行进行处理

将文本文件中的数据进行逐行读取

输出结果中每一行内容后面都多了一个空行,这时因为在文件中每一行的末尾都会有一个换行符, 而每条print()语句也会加上一个换行符,所以每行末尾都有两个换行符,所以输出之后就会多一个空行。


(6). 文件的操作举例

1. 遍历全文本:方式一

2. 遍历全文本:方式二

3. 逐行遍历文件:方法一

4. 逐行遍历文件:方法二

write()方法将指定的字符串写入文件当前插入点位置

文件对象.wirte(写入字符串)

注:每次调用write()方法系统都会返回这次写入文件的字符数

  • 打开文件执行写入操作,连续的write()方法按照顺序依次写入字符串
  • 文件的write()方法将字符串参数原样写入文件,连续希尔不同字符串之间不会添加任何分隔符

writelines()方法可以以序列的形式接受多个字符串作为参数,一次性写入多个字符串

参数可以是:列表、集合、元组、字典,但元素一定要是字符串

  • 和write()方法一样都是字符串原样写入文件,不添加任何分隔符
  • 只有在列表参数的字符串末尾加上分隔符才行


(4). 数据文件写入举例

需要移动指针,从最开始的位置向后遍历,才能输出文本内容

  • 步骤一:定义数据文件格式(接口)
  • 步骤二:编写程序,根据文件接口解析参数绘制图型

(1). 从一个数据到一组数据

(2). 维度:一组数据的组织形式

(3). 数据的分类表示

(4). 数据的操作周期

(1). 如果数据间有序:使用列表类型

(2). 如果数据间无序:使用集合类型

(1). 存储方式一:空格分隔

(2). 存储方式二:逗号分隔

(1). 一维数据的读入处理

(2). 一维数据的写入处理

(1). 使用列表类型


(1). 二维数据的读入处理

(2). 二维数据的写入处理

(3). 二维数据的逐一处理

异常:错误信息影响程序的正常执行

不同的异常被定义为不同的对象,对应不同的错误

异常会立即终止程序的执行,无法实现原定功能。
如果在异常发生时,能及时捕获并作出处理,就能控制异常,纠正错误,保证程序顺利执行

Python语言提供了try子句来进行异常的捕获与处理

程序执行时,如果try子句中发生了指定的异常,则执行except子句部分进行异常的处理,如果try子句执行没有发生异常则执行else子句部分

try-except代码块的作用就是当try代码块中的程序代码运行没有错误,则跳过except代码块;反之如果try代码块中的程序代码运行出现错误,则运行except代码块中的内容,一般except代码块中的内容都是输出错误信息。

如果except代码块后面还有其他代码,程序将继续运行,因为 Python 已经在程序报错后执行了except代码块中的内容,告诉了错误信息,所以可以继续运行程序。

通过raise显式抛出异常信息

Python 的raise显式抛出自己的包含特定信息的异常。一旦执行了raise语句,raise之后的语句将不能执行。

raise关键字之后抛出一个ValueError类型的异常信息,并在后面的参数中定义具体的异常信息。

异常处理不能消灭异常,但是却可以让原本不可控的异常及时被发现,并按照设计好的方式被处理

异常处理让程序不会被意外的终止,而是按照设计以不同的方式结束运行。

except后的异常类型至关重要,需要根据try子句具体操作进行恰当选择。

我要回帖

更多关于 c++怎么查看错误在哪里 的文章

 

随机推荐