爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8356|回复: 8

[作图] 大神们~求助~!NCL读取txt文本问题,请大家帮忙看看,折腾一整天了Orz

[复制链接]

新浪微博达人勋

发表于 2019-1-15 22:16:29 | 显示全部楼层 |阅读模式

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

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

x
lz菜鸡,想用ncl批量读取txt文本绘制路径图,但是由于文本列数不同,折腾半天也不知道该如何读取QAQ,求大神指教,该如何读取列数不同的txt文本,感谢!!

文本大致如下(部分):
95    95.89    97.94    100    101.96    103    105    105.96    107.01    108.95    110.91    115.36    117.46    121.43
95.87    96.47    97.95    98.92    99.1    101.01    101.12                                                                                                        
93.87    96    100.01    101    104.01                                                                                                               
99.99    100.91    101.07    102.98                                                                                                                    
88.42    90.01    93.04    96.14    99.08    100.07    98.37    100.01                                                                                                   
89    90.93    92.85    94.99    98.41    100.47    102.96    106.05    106.44                                                                                                
84.42    87.03    89.97    92.02    94    96.05    98.47    100.97   


脚本:
   xp = new((/41,???/),float)          ; allocate memory
   yp = new((/41,???/),float)
   line = new(41,graphic)
   markers = new(41,graphic)

   ;best track
   xp = asciiread("D:/TPV/first/TPV_SELECTED/weakyeartxt/eastward/xp2.txt", (/41,???/), "float")
   print( xp)
   yp = asciiread("D:/TPV/first/TPV_SELECTED/weakyeartxt/eastward/yp2.txt", (/41,???/), "float")

   ……


   do i = 0,40,1
      
   pres                  = True               ; polyline resources
   pres@gsLineThicknessF = 1.0                ; line thickness
   pres@gsLineColor      = "black"
   line(i) = gsn_add_polyline(wks,map,xp(i,:),yp(i,:),pres)      ; draw the traj

   ;Add markers to the trajectories.
   mres                = True         ; marker resources for best track
   mres@gsMarkerIndex  = 16           ; marker style (filled circle)
   mres@gsMarkerSizeF  = 4.0          ; marker size
   mres@gsMarkerColor  = "black"      ; maker color
   markers(i) = gsn_add_polymarker(wks,map,xp(i,:),yp(i,:),mres)

   end do



  列数不固定,不知道该如何操作,由于读取就错了,后面路径也没办法进行,望各位大神指教QAQ, 非常感谢!





密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-16 08:41:05 | 显示全部楼层
列数不同的情况可以按照字符串读取。看了一下,楼主的数据是以空格分开的,按照字符串读取完了再对字符串按照空格间隔开,并将隔开的字符串转为float格式。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-16 11:48:07 | 显示全部楼层
croton 发表于 2019-1-16 08:41
列数不同的情况可以按照字符串读取。看了一下,楼主的数据是以空格分开的,按照字符串读取完了再对字符串按 ...

你好,非常感谢你的帮助,请问该如何将字符串按照空格间隔开呢?翻手册没找到,试了一早上没成功QAQ,大神求指教!
   xp = asciiread("D:/TPV/first/TPV_SELECTED/weakyeartxt/eastward/xp2.txt", -1, "string")
   delim = " "
   nxp = str_fields_count(xp(0), delim) (print后显示只有一列,“ ”并没有把数据分隔开)
   xp2 = tofloat(str_get_field(xp(0), 1, delim))(转成float后只有第一列的数据,后面列的都不见了)
   
   
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-16 13:55:42 | 显示全部楼层
{:eb502:}{:eb502:}{:eb502:}{:eb502:}{:eb502:}{:eb502:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-16 14:47:51 | 显示全部楼层
croton 发表于 2019-1-16 08:41
列数不同的情况可以按照字符串读取。看了一下,楼主的数据是以空格分开的,按照字符串读取完了再对字符串按 ...

您好,修改了一下,好像读取到数据了,不过由于列数不同,显示有缺省值:
   xp = asciiread("D:/TPV/first/TPV_SELECTED/weakyeartxt/eastward/xp222.csv", -1, "string")
   delim = ","
   strs = str_split_csv(xp, delim,0)
   print(strs)
   xp2 = tofloat(str_get_field(strs, 1, delim))

Coordinates:
Number Of Attributes: 1
  _FillValue :  missing
(0,0)   95
(0,1)           95.89
(0,2)           97.94
(0,3)           100
(0,4)           101.96
(0,5)           103
(0,6)           105
(0,7)           105.96
(0,8)           107.01
(0,9)           108.95
(0,10)          110.91
(0,11)          115.36
(0,12)          117.46
(0,13)          121.43
(0,14)          123.43
(0,15)  missing
(0,16)  missing
(0,17)  missing
(0,18)  missing
(0,19)  missing


绘图时,报错提示:
fatal:Number of subscripts do not match number of dimensions of variable,(2) Subscripts used, (1) Subscripts expected
fatal:["Execute.c":8575]:Execute: Error occurred at or near line 72 in file /cygdrive/d/TPV/first/script3/track.ncl

感觉是这一部分写错了:

do i = 0,40,1   

   pres                  = True               ; polyline resources
   pres@gsLineThicknessF = 1.0                ; line thickness
   pres@gsLineColor      = "black"
   line(i) = gsn_add_polyline(wks,map,xp(i,:),yp(i,:),pres)      ; draw the traj 这报错了,不知道该如何是好Orz

   ;Add markers to the trajectories.
   mres                = True         ; marker resources for best track
   mres@gsMarkerIndex  = 16           ; marker style (filled circle)
   mres@gsMarkerSizeF  = 4.0          ; marker size
   mres@gsMarkerColor  = "black"      ; maker color
   markers(i) = gsn_add_polymarker(wks,map,xp(i,:),yp(i,:),mres)

   end do


大神,请问能继续指点一下么QAQ,感谢!


QQ图片20190116144255.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-16 15:37:38 | 显示全部楼层
croton 发表于 2019-1-16 08:41
列数不同的情况可以按照字符串读取。看了一下,楼主的数据是以空格分开的,按照字符串读取完了再对字符串按 ...

大神你好,我弄出来了啦,谢谢你给的灵感~~~~~~~~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-16 19:46:11 | 显示全部楼层
弄出来就好,我登气象家园刚看到
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-5-12 15:33:06 | 显示全部楼层
C:\Users\cherry\Desktop\11.png 您好 像这种列数对不齐的txt 文件  应该怎么读取呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-11-10 16:57:39 | 显示全部楼层
hlyahs 发表于 2019-1-16 11:48
你好,非常感谢你的帮助,请问该如何将字符串按照空格间隔开呢?翻手册没找到,试了一早上没成功QAQ,大 ...

你还,我也遇到了同样的问题,str_fields_count并没有把数据分隔开,请问你是怎么解决的?谢谢!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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