爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10933|回复: 9

[其他] 批量读取TXT的问题

[复制链接]
发表于 2014-8-30 05:12:38 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 BDRUSH 于 2014-8-30 05:14 编辑

本人想通过NCL做出一段时间内区域降水的日变化数据,最后输出在同一个文本中。但是只能读入第一个文件,输出的文件中也只有第一个文件得到的区域平均降水的值,而后面的无法进行循环,其中出现的错误为:
fatal:Dimension sizes of left hand side and right hand side of assignment do not match
fatal:Execute: Error occurred at or near line 13 in file /cygdrive/c/Users/Administrator/Desktop/time_series.ncl

冥思苦想很久也最终得不出结果,望各位大神各显神通,帮助小弟我吧。
惯例@longlivehj ps:其中文本文件为micaps第三类文件

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"  
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
begin
str = new(184,string)
ascii_file = "time_series.txt"

diri = "/cygdrive/H/Data/pre/"
fils = systemfunc ("ls "+ diri + "13*.000")
d = dimsizes(fils)
do q = 0 ,d-1        
        c = asciiread(fils(q),-1,"string")                              ; 第13行
        delim = " "
        zlon = stringtofloat(str_get_field(c(11::),2,delim))
        zlat = stringtofloat(str_get_field(c(11::),3,delim))
        zpre = stringtofloat(str_get_field(c(11::),5,delim))

        t0 = 0                                          
        t1 = 0
        i = 0
        n = 0                                               
        j = 0
        m = dimsizes(zpre)
        do i = 0,m-1                    ;循环有多少个站点      
                if((zlon(i).ge.119.).and.(zlon(i).le.135)) then                     
                        if((zlat(i).ge.38).and.(zlat(i).le.54)) then                  
                                n=n+1
                        end if
                end if
        end do

        alon = new(n,float)
        alat = new(n,float)
        apre = new(n,float)
        do i=0,m-1                 
                if((zlon(i).ge.119.).and.(zlon(i).le.135)) then                     
                        if((zlat(i).ge.38).and.(zlat(i).le.54)) then           
                                alon(j)=zlon(i)
                                alat(j)=zlat(i)
                                apre(j)=zpre(i)        
                                j=j+1
                        end if
                end if
        end do

        olon = ispan(119,135,1)  ;olon = ispan(90,126,1)
        olat = ispan(38,54,1)   ;olat = ispan(22,34,1)

        olon!0          = "lon"
        olon@long_name  = "lon"
        olon@units      = "degree_east"
        olon&lon        = olon
        olat!0          = "lat"
        olat@long_name  = "lat"
        olat@units      = "degree_north"
        olat&lat        = olat

        zpre@_FillValue = -999.000000
        zpre@missing_value = zpre@_FillValue  
        rscan =  (/5,3,1,0.5/)
        data1 = obj_anal_ic_Wrap(alon,alat,apre,olon,olat,rscan,False
        data1@_FillValue = -999.000000
        data1@missing_value = data1@_FillValue
        
        a = new(16,float)
        N = new(16,integer)
        a(0) = sum(data1(3:5,2))
        N(0) = num(.not.ismissing(data1(3:5,2)))
        a(0) = a(0)/N(0)
        
        a(1) = sum(data1(0:7,3))
        N(1) = num(.not.ismissing(data1(0:7,3)))
        a(1) = a(1)/N(1)
        
        a(2) = sum(data1(0:10,4))
        N(2) = num(.not.ismissing(data1(0:10,4)))
        a(2) = a(2)/N(2)
        
        a(3) = sum(data1(0:12,5))
        N(3) = num(.not.ismissing(data1(0:12,5)))
        a(3) = a(3)/N(3)
        
        a(4) = sum(data1(0:12,6))
        N(4) = num(.not.ismissing(data1(0:12,6)))
        a(4) = a(4)/N(4)
        
        a(5) = sum(data1(0:12,7))
        N(5) = num(.not.ismissing(data1(0:12,7)))
        a(5) = a(5)/N(5)
        
        if(all(ismissing(data1(14,7)))) then
                a(6) = 0
                t0 = 0
        else
            a(6) = sum(data1(14,7))
                t0 = 1
        end if

        a(7) = sum(data1(0:14,8))
        N(7) = num(.not.ismissing(data1(0:14,8)))
        a(7) = a(7)/N(7)
        
        a(8) = sum(data1(1:15,9))
        N(8) = num(.not.ismissing(data1(1:15,9)))
        a(8) = a(8)/N(8)
        
        a(9) = sum(data1(0:11,10))
        N(9) = num(.not.ismissing(data1(0:11,10)))
        a(9) = a(9)/N(9)
        
        N(10) = num(.not.ismissing(data1(14:15,10)))
        if(N(10).eq.0) then
                a(10) = 0
                t1 = 0
        else
                a(10) = sum(data1(14:15,10))
                a(10) = a(10)/N(10)
                t1 = 1
        end if
        
        a(11) = sum(data1(0:11,11))
        N(11) = num(.not.ismissing(data1(0:11,11)))
        a(11) = a(11)/N(11)
        
        a(12) = sum(data1(0:8,12))
        N(12) = num(.not.ismissing(data1(0:8,12)))
        a(12) = a(12)/N(12)
        
        a(13) = sum(data1(1:8,13))
        N(13) = num(.not.ismissing(data1(1:8,13)))
        a(13) = a(13)/N(13)        
        
        a(14) = sum(data1(2:7,14))
        N(14) = num(.not.ismissing(data1(2:7,14)))
        a(14) = a(14)/N(14)
        
        a(15) = sum(data1(2:6,15))
        N(15) = num(.not.ismissing(data1(2:6,15)))
        a(15) = a(15)/N(15)
        
        if(t0.eq.0.and.t1.eq.0) then
                pre= sum(a)/14
        else
                if(t0.eq.0.and.t1.eq.1) then
                        pre = sum(a)/15
                else
                        if(t0.eq.1.and.t1.eq.0) then
                                pre = sum(a)/15
                        else
                                if(t0.eq.1.and.t1.eq.1) then        
                                        pre = sum(a)/16
                                end if
                        end if
                end if
        end if

        str(q) = sprintf("%9.5f", pre)
        asciiwrite(ascii_file, str(q))

end do
end


13050108.000

35.7 KB, 下载次数: 5, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao
发表于 2014-8-30 06:06:45 来自手机 | 显示全部楼层
文件的行数可能不一样,所以c之类的变量要用“:=”赋值。后面还有错,你把这个改掉先。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-8-30 14:13:23 | 显示全部楼层
longlivehj 发表于 2014-8-30 06:06
文件的行数可能不一样,所以c之类的变量要用“:=”赋值。后面还有错,你把这个改掉先。

额,感谢你的回答,自己又折腾了一会儿,总算弄出来了。
密码修改失败请联系微信:mofangbao
发表于 2014-9-1 11:45:04 | 显示全部楼层
围观下围观下围观下围观下
密码修改失败请联系微信:mofangbao
发表于 2014-9-29 15:17:19 | 显示全部楼层
想知道怎么解决的
密码修改失败请联系微信:mofangbao
发表于 2014-12-28 17:31:39 | 显示全部楼层
longlivehj 发表于 2014-8-30 06:06
文件的行数可能不一样,所以c之类的变量要用“:=”赋值。后面还有错,你把这个改掉先。

我也遇到这样的问题。
begin
    diri = "/mnt/lustre/hanzq/ss/11/"
    fils = systemfunc ("ls "+ diri + "SURF_CLI_CHN_MUL_DAY-TEM-12001-1951*.TXT")
    print(fils)
    d = dimsizes(fils)
        do i = 0 ,d-1
        data = asciiread(fils(i),-1,"string")
    end do
    print(data)
end

提示fatal:Dimension sizes of left hand side and right hand side of assignment do not match
fatal:Execute: Error occurred at or near line 18 in file 44.ncl
请问下,你说的c用“:=”是什么意思啊?初学者请指教。@longlivehj
密码修改失败请联系微信:mofangbao
发表于 2014-12-29 09:11:18 | 显示全部楼层
gercibee 发表于 2014-12-28 17:31
我也遇到这样的问题。
begin
    diri = "/mnt/lustre/hanzq/ss/11/"

http://www.ncl.ucar.edu/Document ... .shtml#Reassignment
密码修改失败请联系微信:mofangbao
发表于 2014-12-29 11:34:42 | 显示全部楼层
gercibee 发表于 2014-12-28 17:31
我也遇到这样的问题。
begin
    diri = "/mnt/lustre/hanzq/ss/11/"

试着,定义下data维数
密码修改失败请联系微信:mofangbao
发表于 2015-8-15 14:43:09 | 显示全部楼层
还是没搞明白
密码修改失败请联系微信:mofangbao
发表于 2019-4-26 10:39:12 | 显示全部楼层
BDRUSH 发表于 2014-8-30 14:13
额,感谢你的回答,自己又折腾了一会儿,总算弄出来了。

请问楼主是怎么解决的  我把赋值改为“:=”怎么还有错误
fatal:Dimension sizes of left hand side and right hand side of assignment do not match
fatal:["Execute.c":8605]:Execute: Error occurred at or near line 15 in file read.ncl

读出了第一个文件的数据,后面就读不出来了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表