2017-09-27 550 views
0

如何讀取Fortran中的以下數據。我無法讀取此文件中的數據。我收到以下錯誤如何在Fortran中讀取我的csv文件?

severe (64): input conversion error, unit 18 

Image    PC    Routine   Line  Source    
a.out    00000000004734AA Unknown    Unknown Unknown 

這是我的代碼:

 program dataread 
     implicit none 
     character*15 ::head_1,head_2,head_3,head_4,head_5,head_6 
     character*15:: B,C, head_7,head_8,head_9,head_10 
     real,dimension(1:71385,1:10)::A 
     integer::i,j 

     open(unit=18, file='Tws15thHourlyData.csv' , status='old', 
    & access ='sequential',form='formatted')!,recl=71781*10) 

     read(18,*) head_1,head_2,head_3,head_4,head_5,head_6, 
    &   head_7,head_8, head_9,head_10 


     do i=2,71385 
     read(18,300)(A(i,j),j=1,10) 
300 format(I5,A17,2F9.6,A8,5F4.1) 
     end do 

     print*, head_1,head_2,head_3,head_4,head_5,head_6, 
    &   head_7,head_8, head_9,head_10 
     do i=2,71385 
     read(18,300)(A(i,j),j=1,10) 
300 format(I5,A17,2F9.6,A8,5F4.1) 
     end do 

     print*, head_1,head_2,head_3,head_4,head_5,head_6, 
    &   head_7,head_8, head_9,head_10 


     do i=2,71385 
       print*, (A(i,j),j=1,10) 
     end do 
     close(18) 
     open(unit=28,file='14data.txt') 
     write(28, 100),((A(i,j),j=1,10),i=2,71385) 
100  format(10(71385(I4,A15,2F9.6,A8,5F4.1,2x),/)) 
     end program 

這個數據我想讀

TWSCODE,DISTRICT,LATITUDE_DD,LONGITUDE_DD,RECORDED_DATE,HOUR,TEMPERATURE,HUMIDITY,WIND_SPEED,WIND_DIRECTION 

109,KALABURAGI,17.463587,77.42,14-08-17,0,26.2,79.4,0,168 
109,KALABURAGI,17.463587,77.42,14-08-17,0,26.2,80,0,25 

109,KALABURAGI,17.463587,77.42,14-08-17,0,26.1,80.4,0,25 
109,KALABURAGI,17.463587,77.42,14-08-17,0,25.9,81,0,25 

109,KALABURAGI,17.463587,77.42,14-08-17,1,25.8,81.7,0,25 
109,KALABURAGI,17.463587,77.42,14-08-17,1,25.9,82,0,287 
109,KALABURAGI,17.463587,77.42,14-08-17,1,25.9,82.5,0,299 
109,KALABURAGI,17.463587,77.42,14-08-17,1,25.8,82.8,0,286 
109,KALABURAGI,17.463587,77.42,14-08-17,2,25.6,83.5,0,254 
109,KALABURAGI,17.463587,77.42,14-08-17,2,25.6,83.9,0,292 
109,KALABURAGI,17.463587,77.42,14-08-17,2,25.6,84,0,299 
109,KALABURAGI,17.463587,77.42,14-08-17,2,25.6,84.2,0,309 
109,KALABURAGI,17.463587,77.42,14-08-17,3,25.5,84.4,0,327 
109,KALABURAGI,17.463587,77.42,14-08-17,3,25.4,84.8,0,315 
109,KALABURAGI,17.463587,77.42,14-08-17,3,25.3,84.8,0,305 
109,KALABURAGI,17.463587,77.42,14-08-17,3,25.2,84.8,0,306 
109,KALABURAGI,17.463587,77.42,14-08-17,4,25.2,84.9,0,305 
109,KALABURAGI,17.463587,77.42,14-08-17,4,25.2,85.1,0,306 
109,KALABURAGI,17.463587,77.42,14-08-17,4,25.1,85.3,0,305 
109,KALABURAGI,17.463587,77.42,14-08-17,4,25.1,85.4,0,305 
109,KALABURAGI,17.463587,77.42,14-08-17,5,25.1,85.7,0,308 
+0

我看不到任何代碼。無論如何,當你嘗試你的代碼時,你遇到了什麼樣的問題?請顯示代碼並描述出了什麼問題。閱讀[問]和[mcve]。 –

+0

那麼當你使用你的代碼時會發生什麼?您的帖子中沒有任何問題。你想知道什麼?你顯示的代碼有問題嗎?我們無法讀懂你的想法。你必須問一個問題。 –

+0

你使用哪種編譯器?你如何編譯你的代碼?請使用編譯器提供的所有調試功能。('gfortran -g -fbacktrace -Wall -fcheck = all','ifort -g -traceback -warn -check')。 –

回答

2

我不喜歡@ agentp的回答,並且表示不同意這樣的評論,即應該將該行讀作字符串,並且解析它。

所以我寫了這個...

正如我指出在評論上述OP的代碼中的錯誤(也可能是唯一的一個)的一個使用此語句,和格式

 read(18,300)(A(i,j),j=1,10) 
300 format(I5,A17,2F9.6,A8,5F4.1) 

試圖將數字和字符串混合成一個reals的數組。這永遠不會奏效。退後一步,給一些想法。輸入文件包含一些結構良好的數據,爲什麼不定義一個好的結構來存儲它呢?第一類型定義是這樣的:

TYPE :: met_record 
    INTEGER :: TWSCODE 
    CHARACTER(len=32) :: DISTRICT 
    REAL :: LATITUDE_DD 
    REAL :: LONGITUDE_DD 
    CHARACTER(len=8) :: RECORDED_DATE 
    INTEGER :: HOUR 
    REAL :: TEMPERATURE 
    REAL :: HUMIDITY 
    REAL :: WIND_SPEED 
    REAL :: WIND_DIRECTION 
    END TYPE met_record 

那麼這些

TYPE(met_record), DIMENSION(71385) :: weather_reports 

陣列現在在讀取數據的確是很容易的......

do i = 1, 71385 
    read(18,*) weather_reports(i) 
end do 

看!看不清楚格式。正確聲明變量並讓Fortran解析輸入行。

注:

  • 我寫的比較現代的Fortran和有固定格式源文件沒有卡車。
  • 我還沒有做任何安排閱讀文件頭,已經有代碼。
  • met_record可以簡單的write(28,*) weather_reports(i)
0

這是一種方法:

integer,parameter :: n=71385 
character*15 :: strings(10,n) 
real :: a(7,n) 
integer :: tw(n) 

..

do i=1,n 
    read(18,*)strings(:,i) 
    read(strings(1,i),*)tw(i) 
    read(strings(3:4,i),*)a(1:2,i) 
    read(strings(6:10,i),*)a(3:7,i) 
end do 

請注意,我換了陣列,以便分配到連續的內存位置。