fortran读文本文件--汉字问题
来源:互联网 发布:简品花果茶淘宝 编辑:程序博客网 时间:2024/06/07 14:12
最近在学习fortran,参考教材是彭国伦的《Fortran95程序设计》,感觉写得不错。今天看到文件部分,想实现从文本文件中读取数据到数组中。
要读取的数据存在一个叫data.txt的文本文件中,数据内容如下:
教材中例子的代码如下,注释是我自己加上去的:
!定义模块,里面的type所fortran自定义的数据类型,类似c语言中的结构体!下面的代码所定义了一个名为student的type数据,里面有3个成员,分别来记录3门功课成绩 module typedef type student integer Chinese,English,Math end typeend moduleprogram tst!使用上面定义的模块 use typedef implicit none type(student)::s!定义变量 character(len=80)::filename="data.txt" integer,parameter::fileid=10 integer::error integer::no logical::alive!检查文件是否存在,若不存在就退出程序 inquire(file=filename,exist=alive) if(.not. alive) then write(*,*) trim(filename),"doesn't exist." stop end if!打开文件 open(fileid,file=filename) do while(.true.) !下面开始读数据,nX表示跳过n个字符,过滤不需要的数据,把座号和成绩分别赋给no和s数组 read(fileid,"(5XI2,/,5XI3,6XI3,6XI3)",iostat=error) no,s !error不为0表示读取过程中出错,退出程序 if(error/=0) exit !将读取的数据显示在屏幕上 write(*,"(I2'号 中文:'I3' 英文:'I3' 数学:'I3)") no,s end do close(fileid) stopend
其中最重要的就是read语句了,fileid用来指定要读取数据的文件代码,后面“()”里的部分是读取的格式,具体的含义为:跳过5个字符读取2个字节,换行,跳过5个字符读取3个字节,跳过6个字符读取3个字节,跳过6个字符读取2个字节。
教材上说一个汉字占2个字符,所以2个汉字加一个冒号就是5个字符,跳过5个字符就是我们需要的数据了,但是我在codeblocks下面运行什么都没有输出。调试了一下发现no(座号)为0,s数组里是随机数,error不为0,说明读取过程中出错直接退出了,所以屏幕上什么都没有。
考虑到可能是汉字的原因,我把data文件中的汉字去掉换成英文的:
把read一行改成下面这样:
read(fileid,"(3XI2,/,8XI3,8XI3,5XI3)",iostat=error) no,s
然后运行就能正确输出结果了:看来果然是因为汉字。我一直以为1个汉字占2个字符,这个认识已经根深蒂固了。我查了一下,这个是因为字符编码的问题,比如UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,它使用一至四个字节为每个字符编码:
- 128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。
- 带有附加符号的拉丁文、希腊文、希伯来文、阿拉伯文等则需要二个字节编码(Unicode范围由U+0080至U+07FF)。
- 其他基本多文种平面(BMP)中的字符(这包含了大部分常用字)使用三个字节编码。
- 其他极少使用的Unicode辅助平面的字符使用四字节编码。
按照上面说的一个汉字应该占3个字符,那么把read命令改成下面这样:
read(fileid,"(7XI2,/,7XI3,7XI3,7XI3)",iostat=error) no,s
再编译运行一下就能输出跟上面一样的结果了。
PS. CSDN编辑博客真不方便!
- fortran读文本文件--汉字问题
- fortran读文本文件—数据长度不一致问题
- fortran读文本文件—无法估计数据数目问题
- FORTRAN 数组的下标问题
- fortran关于NaN的问题
- Fortran
- fortran
- fortran
- 读汉字文件路径问题
- 汉字统计--统计给定文本文件中汉字的个数。
- 用 FORTRAN 编写 DLL 的问题
- 用FORTRAN编写DLL的问题
- C 调用 fortran 可能遇到的问题
- 读文本文件
- 文本文件磁盘空间分配问题
- Linux文本文件编码问题
- C# 文本文件读写问题
- 筛选(中文)文本文件中的相关汉字,及转成数组等
- 为WTC配置TUXEDO配置文件domconfig
- 非负矩阵分解算法基于hadoop streaming的实现
- 课后练习 exercise 4.1
- 经典排序算法 – 插入排序Insertion sort
- 二叉树的非递归遍历
- fortran读文本文件--汉字问题
- strcpy(d,s)的溢出问题
- PHP单文件入口URL路由原理
- WINCC VBS调试,诊断功能,ADO
- 条件编译
- Oracle闪回flashback总结
- Anagrams
- C#:在用VS2005开发WinCE6.0应用程序时,部署报错的处理
- ubuntu 下设置git 命令的字符颜色