主题:Fortran读写格式
Amely
[专家分:10] 发布于 2011-06-27 16:43:00
大家好,我有一列数据,下网格式化输出,
51804,新疆,-2146.817493,-481.312853,3090.1,1554.044738,塔什库尔干
我只希望最后一列格式化,前面的按照默认格式,该怎么写这个语句呢?
谢谢大家
回复列表 (共12个回复)
沙发
yeg001 [专家分:14390] 发布于 2011-06-27 23:01:00
不明白...
你的数据是一列一列输出的?
板凳
Amely [专家分:10] 发布于 2011-06-28 12:21:00
我是想把数据读到数组里面,只是最后一项格式化读取。是因为最后一项里面可能有空格,比如 寿 县。Fortran遇到空格就自动停止了
3 楼
yeg001 [专家分:14390] 发布于 2011-06-28 13:27:00
我不知道你用什么格式读取, 文字应该是字符串读取的, 字符串读取不会因为遇到空格而停下来的. 你看看是不是算错字符长度.
4 楼
fortran2008 [专家分:750] 发布于 2011-06-28 14:20:00
给你提供一个思路:把每一行数据读入到一个字符串中(字符串的长度要尽量长些,以保证每一行数据能读进去)之后,在字符串中以字符串长度做一个循环,从第一个字符串元素开始,作判断,如果元素是","就将","之前的字符串元素读入到一个新的字符串中(最好是读入到字符串数组中)。
有了这些就字符串数组,你可以再进一步操作了。如:"寿 县"为读入到的某个字符串数组中的元素,可以将其修改为"寿县",如果字符串是"1554.044738",可以用内部文件的方法将其转变成数字1554.044738。 特别注意:汉字是两个字节长,即 s="中国" 时,s(1:2)="中",s(3:4)="国"。
5 楼
Amely [专家分:10] 发布于 2011-06-28 18:17:00
[quote]我不知道你用什么格式读取, 文字应该是字符串读取的, 字符串读取不会因为遇到空格而停下来的. 你看看是不是算错字符长度.[/quote]
会的,肯定是会的。我的字符定义是大于字符串长度的,因为最后一列的长度也是不相同的。
6 楼
Amely [专家分:10] 发布于 2011-06-28 18:19:00
[quote]给你提供一个思路:把每一行数据读入到一个字符串中(字符串的长度要尽量长些,以保证每一行数据能读进去)之后,在字符串中以字符串长度做一个循环,从第一个字符串元素开始,作判断,如果元素是","就将","之前的字符串元素读入到一个新的字符串中(最好是读入到字符串数组中)。
有了这些就字符串数组,你可以再进一步操作了。如:"寿 县"为读入到的某个字符串数组中的元素,可以将其修改为"寿县",如果字符串是"1554.044738",可以用内部文件的方法将其转变成数字1554.044738。 特别注意:汉字是两个字节长,即 s="中国" 时,s(1:2)="中",s(3:4)="国"。
[/quote]
这个思路也是我刚开始想的,但是因为数据只是用逗号分隔,长度并不是固定的,就很麻烦,而且很托速度。
7 楼
yeg001 [专家分:14390] 发布于 2011-06-28 20:38:00
[quote][quote]我不知道你用什么格式读取, 文字应该是字符串读取的, 字符串读取不会因为遇到空格而停下来的. 你看看是不是算错字符长度.[/quote]
会的,肯定是会的。我的字符定义是大于字符串长度的,因为最后一列的长度也是不相同的。[/quote]
所以我不知道你说的自动停止是出错还是什么.
如果你现在还用默认格式读取数据的话, 开始翻翻书看如何格式化读取吧. 如果默认读取能解决所有问题的话fortran增加格式化读取干什么呢?
8 楼
yeg001 [专家分:14390] 发布于 2011-06-28 20:42:00
[quote][quote]给你提供一个思路:把每一行数据读入到一个字符串中(字符串的长度要尽量长些,以保证每一行数据能读进去)之后,在字符串中以字符串长度做一个循环,从第一个字符串元素开始,作判断,如果元素是","就将","之前的字符串元素读入到一个新的字符串中(最好是读入到字符串数组中)。
有了这些就字符串数组,你可以再进一步操作了。如:"寿 县"为读入到的某个字符串数组中的元素,可以将其修改为"寿县",如果字符串是"1554.044738",可以用内部文件的方法将其转变成数字1554.044738。 特别注意:汉字是两个字节长,即 s="中国" 时,s(1:2)="中",s(3:4)="国"。
[/quote]
这个思路也是我刚开始想的,但是因为数据只是用逗号分隔,长度并不是固定的,就很麻烦,而且很托速度。[/quote]
如果没什么规律, 这个或者是挺适合的方法了.
9 楼
Amely [专家分:10] 发布于 2011-06-29 16:05:00
[quote][quote][quote]我不知道你用什么格式读取, 文字应该是字符串读取的, 字符串读取不会因为遇到空格而停下来的. 你看看是不是算错字符长度.[/quote]
会的,肯定是会的。我的字符定义是大于字符串长度的,因为最后一列的长度也是不相同的。[/quote]
所以我不知道你说的自动停止是出错还是什么.
如果你现在还用默认格式读取数据的话, 开始翻翻书看如何格式化读取吧. 如果默认读取能解决所有问题的话fortran增加格式化读取干什么呢?[/quote]
格式读取的话,字符串会将空格作为字符串的一部分,直到达到字符串的长度.所以中间有空格的字符串必须格式化读取.我的意思是一行数据,怎样实现默认和格式化读取的同时实现.如果全部格式化的话,书上有很多例子的.
10 楼
Amely [专家分:10] 发布于 2011-06-29 16:06:00
[quote][quote][quote]给你提供一个思路:把每一行数据读入到一个字符串中(字符串的长度要尽量长些,以保证每一行数据能读进去)之后,在字符串中以字符串长度做一个循环,从第一个字符串元素开始,作判断,如果元素是","就将","之前的字符串元素读入到一个新的字符串中(最好是读入到字符串数组中)。
有了这些就字符串数组,你可以再进一步操作了。如:"寿 县"为读入到的某个字符串数组中的元素,可以将其修改为"寿县",如果字符串是"1554.044738",可以用内部文件的方法将其转变成数字1554.044738。 特别注意:汉字是两个字节长,即 s="中国" 时,s(1:2)="中",s(3:4)="国"。
[/quote]
这个思路也是我刚开始想的,但是因为数据只是用逗号分隔,长度并不是固定的,就很麻烦,而且很托速度。[/quote]
如果没什么规律, 这个或者是挺适合的方法了.[/quote]
恩,谢谢了.先按照这么处理的,但是希望更好的方法.
我来回复