fcode 发表于 2017-4-10 21:22:44

没想到你连复制粘贴都不会

桂圆莲子汤 发表于 2017-4-10 21:51:01

fcode 发表于 2017-4-10 21:22
没想到你连复制粘贴都不会

对不起,之前把空格去掉了,我自己没注意,不好意思,可是这次我是真的复制过去的,还是一样的错误,但是如果我把它定义2个变量,是可以编译的,只要编译三个以上,长度超出之后,还是这个错误,所以请问是否是应该使用续行符的问题:
wheat_area.f(8): error #5120: Unterminated character constant
      character(9),parameter:: strHead(6)=['alloc_key','whea   ','whea_h   ','whea_l   ', 'whea_i   ','whea_s   ']
-------------------------------------------------------------------^
wheat_area.f(8): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: , (/ : ]
      character(9),parameter:: strHead(6)=['alloc_key','whea   ','whea_h   ','whea_l   ', 'whea_i   ','whea_s   ']
--------------------------------------------------------------------------------------------------------------------^
wheat_area.f(8): error #6366: The shapes of the array expressions do not conform.   
      character(9),parameter:: strHead(6)=['alloc_key','whea   ','whea_h   ','whea_l   ', 'whea_i   ','whea_s   ']
-------------------------------^
compilation aborted for wheat_area.f (code 1)

pasuka 发表于 2017-4-10 22:11:05

桂圆莲子汤 发表于 2017-4-10 21:51
对不起,之前把空格去掉了,我自己没注意,不好意思,可是这次我是真的复制过去的,还是一样的错误,但是 ...

*.f格式最大列数不超过80,把文件后缀名改成*.f90

活学活用,急用先学并不代表本站的视频教程和彭国伦的书无关紧要啊

fcode 发表于 2017-4-11 07:53:37

太长了可以续行

桂圆莲子汤 发表于 2017-4-11 09:18:07

pasuka 发表于 2017-4-10 22:11
*.f格式最大列数不超过80,把文件后缀名改成*.f90

活学活用,急用先学并不代表本站的视频教程和彭国伦的 ...

谢谢,非常感谢

山水 发表于 2017-10-7 11:06:01

program test
implicit none
integer,parameter::nCol = 36
integer i, j
character(80) str(nCol)

character(32),parameter::strHead(1)=['Province']
!strHead(23)=['Province','City','Stationname','Longitude','Latitude','Publishtime', 'AQI','SO2','NO2','CO','O3','PM10', &
!'PM2_5','SO2_24H_AVG','NO2_24H_AVG','CO_24H_AVG','O3_24H_AVG','PM10_24H_AVG','PM2_5_24H_AVG','O3_8H','O3_8H_24H','PrimaryPollutant','Quality']

logical L(nCol)

open(11,file='F:\GraduateStudent\Data-Data\sichuanpollution.csv')
open(10,file='F:\GraduateStudent\Data-Data\sichuanpollution1.csv')
!读取表头
read(10,*) str
!判断需要读取的列
L = .false.
do i = 1, nCol
    str(i) = adjustl( str(i) )
    if( any(trim(str(i))==strHead) ) then
      L(i) = .true.
      write(11,"(a,',')",advance='no') trim( str(i) ) !输出新表头
    end if
end do
write(11,*)
do
    read(10,*,iostat=j) str
    if(j/=0) exit
    do i =1, nCol
      if(.NOT.L(i)) cycle
      write(11,'(a,",")',advance='no') trim( str(i) )
    end do
    write(11,*)
end do
end program test
我复制粘贴后按照自己需要的修改了一下,不管是定义1个变量还是3个甚至更多变量,都会出现这样一个错误:error FOR3852: syntax error detected between = and ['Province'],想问一下是什么原因呢{:4_89:}

fcode 发表于 2017-10-9 09:54:02

山水 发表于 2017-10-7 11:06
program test
implicit none
integer,parameter::nCol = 36


请放弃 PowerStation 这种古老的编译器。

逗逗逗儿啵 发表于 2017-12-17 10:15:51

fcode 发表于 2017-4-10 17:20
少了一个引号,请直接复制粘贴我的代码。
按照上面的代码复制了,但是因为原文件有些数据是空缺的,生成的文件空缺的地方自动补充了,请问您有什么解决办法嘛~program test
implicit none
integer,parameter::nCol = 949
integer i, j
character(10000) str(nCol)
character(*),parameter:: strHead(9)=['date','hour','type','1142A','1143A','1144A','1145A', '1146A','1147A']
logical L(nCol)
open(10,file='E:\shuju\zhandian\20140513-20141231\china_sites_20141201.csv')
open(11,file='E:\shuju\china_sites_20141201.csv')
!读取表头
read(10,*) str
!判断需要读取的列
L = .false.
do i = 1,nCol
    str(i) = adjustl( str(i) )
    if( any(trim(str(i))==strHead) ) then
      L(i) = .true.
      write(11,"(a,',')",advance='no') trim( str(i) ) !输出新表头
    end if
end do
write(11,*)
do
    read(10,*,iostat=j) str
    if(j/=0) exit
    do i =1, nCol
      if(.NOT.L(i)) cycle
      write(11,'(a,",")',advance='no') trim( str(i) )
    end do
    write(11,*)
end do
end program test


Rookie 发表于 2022-4-14 16:50:16

li913 发表于 2017-4-8 18:23
write的问题,去掉最外层括号就好。program test
implicit none
integer,pa ...

请问第19和28行的 write语句括号中的format部分,所用的单引号、双引号,刚好反过来了。这是什么原因呢?

青衣巷 发表于 2022-4-14 17:10:33

Rookie 发表于 2022-4-14 16:50
请问第19和28行的 write语句括号中的format部分,所用的单引号、双引号,刚好反过来了。这是什么原因 ...

没关系的,Fortran不区分单双引号。
只要间隔开就行了。
比如你用 " 开头,里面就要用 ',例如 "I ' m fcode"
而用 ' 开头,里面就要用 " ,例如 ' I "m fcode '
页: 1 [2] 3
查看完整版本: fortran抽取csv文件中某几列,写成新文件(新手求教)