Board logo

标题: [数值计算] [已解决]批处理如何实现角度数据处理? [打印本页]

作者: aliny2003    时间: 2021-7-31 09:09     标题: [已解决]批处理如何实现角度数据处理?

本帖最后由 aliny2003 于 2021-8-25 06:17 编辑

w.txt
角度数据文件如下:
198
188
163
156
076
011
058
029
053
341
336
304
306
301
283
299
291
293
301
301
298
282
037
323
012
187
PPC
027
010
047
044
001
355
323
310
298
309
291
295
319
289
300
280
293
271
275
294
285
268
335
052
067
143
168
300
355
312
272
298
284
317
PPC
170
PPC
133
179
291
310
317
PPC
035
129

1、角度范围0-90,记为了E(东),并统计个数
2、角度范围91-180,记为了S(南),并统计个数
3、角度范围181-270,记为了S(西),并统计个数
4、角度范围271-359,记为了S(西),并统计个数
4、PPC为了静风,统计出现的个数

新人,多多指教。
作者: qixiaobin0715    时间: 2021-7-31 10:38

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%a in (w.txt) do (
  4.     if %%a==PPC (
  5.         set /a p+=1
  6.     ) else (
  7.         if %%a lss 91 (
  8.             set /a n1+=1
  9.         ) else if %%a lss 181 (
  10.             set /a n2+=1
  11.         ) else if %%a lss 271 (
  12.             set /a n3+=1
  13.         ) else (
  14.             set /a n4+=1
  15.         )
  16.     )
  17. )
  18. echo,E(东):共有!n1!个
  19. echo,S(南):共有!n2!个
  20. echo,W(西):共有!n3!个
  21. echo,N(北):共有!n4!个
  22. echo,静风:共有!p!个
  23. pause
复制代码

作者: aliny2003    时间: 2021-8-4 09:55

回复 2# qixiaobin0715


    w.txt
角度数据文件如下:
198
188
163
156
076
011
058
029
053
341
336
304
306
301
283
299
291
293
301
301
298
282
037
323
012
187
PPC
027
010
047
044
001
355
323
310
298
309
291
295
319
289
300
280
293
271
275
294
285
268
335
052
067
143
168
300
355
312
272
298
284
317
PPC
170
PPC
133
179
291
310
317
PPC
035
129

再细化点:
1、角度范围348-10,记为北,并统计个数
2、角度范围11-33,记为北东北,并统计个数
3、角度范围34-56,记为东北,并统计个数
4、角度范围57-78,记为东东北,并统计个数
5、角度范围79-101,记为东,并统计个数
6、角度范围102-123,记为东东南,并统计个数
7、角度范围124-146,记为东南,并统计个数
8、角度范围147-168,记为南东南,并统计个数
9、角度范围169-191,记为南,并统计个数
10、角度范围192-213,记为南西南,并统计个数
11、角度范围214-236,记为西南,并统计个数
12、角度范围237-258,记为西西南,并统计个数
13、角度范围259-281,记为西,并统计个数
14、角度范围282-303,记为西西北,并统计个数
15、角度范围304-326,记为西北,并统计个数
16、角度范围327-347,记为北西北,并统计个数
17、PPC为了静风,统计出现的个数
作者: qixiaobin0715    时间: 2021-8-4 12:34

回复 3# aliny2003
就是多几个else if和echo而已,可参照楼上代码自行修改。
作者: aliny2003    时间: 2021-8-5 21:42

回复 4# qixiaobin0715


    @echo off
chcp 65001
setlocal enabledelayedexpansion
for /f %%a in (K:\feng\mm.txt) do (
    if %%a==PPC (
        set /a p+=1
    ) else (
        if %%a gtr 11 if %%a lss 33 (
            set /a n1+=1
        ) else %%a gtr 34 if %%a lss 56 (
            set /a n2+=1
        ) else %%a gtr 57 if %%a lss 78 (
            set /a n3+=1
        ) else %%a gtr 79 if %%a lss 101 (
            set /a n4+=1
        ) else %%a gtr 102 if %%a lss 123 (
            set /a n5+=1
        ) else %%a gtr 124 if %%a lss 146 (
            set /a n6+=1
        ) else %%a gtr 147 if %%a lss 168 (
            set /a n7+=1
        ) else %%a gtr 169 if %%a lss 192 (
            set /a n8+=1
        ) else %%a gtr 193 if %%a lss 213 (
            set /a n9+=1
        ) else %%a gtr 214 if %%a lss 236 (
            set /a n10+=1
        ) else %%a gtr 237 if %%a lss 258 (
            set /a n11+=1
        ) else %%a gtr 259 if %%a lss 281 (
            set /a n12+=1
        ) else %%a gtr 282 if %%a lss 303 (
            set /a n13+=1
        ) else %%a gtr 304 if %%a lss 326 (
            set /a n14+=1
        ) else %%a gtr 327 if %%a lss 348 (
            set /a n15+=1
        ) else (
            set /a n16+=1
        )
    )
)
echo 6月份北东北总共: !n1!
echo 6月份东北总共:!n2!
echo 6月份东东北总共:!n3!
echo 6月份东总共:!n4!
echo 6月份东东南总共:!n5!
echo 6月份东南总共:!n6!
echo 6月份南东南总共:!n7!
echo 6月份南总共: !n8!
echo 6月份南西南总共: !n9!
echo 6月份西南总共: !n10!
echo 6月份西西南总共: !n11!
echo 6月份西总共: !n12!
echo 6月份西西北总共: !n13!
echo 6月份西北总共:!n14!
echo 6月份北西北总共: !n15!
echo 6月份北总共:!n16!
echo 6月份静风总共 !p!个
pause
作者: aliny2003    时间: 2021-8-5 21:44

运行会报错误,
Active code page:65001
else was unexpected at this time.
作者: Batcher    时间: 2021-8-5 22:30

回复 6# aliny2003


    请再观察一下2楼的代码,你的好多个else后面少了if
作者: aliny2003    时间: 2021-8-5 23:27

@echo off
chcp 65001
setlocal enabledelayedexpansion
for /f %%a in (K:\feng\mm.txt) do (
    if %%a==PPC (
        set /a p+=1
    ) else (
        if %%a geq 11 if %%a leq 33 (
            set /a n1+=1
        ) else if %%a geq 34 if %%a leq 56 (
            set /a n2+=1
        ) else if %%a geq 57 if %%a leq 78 (
            set /a n3+=1
        ) else if %%a geq 79 if %%a leq 101 (
            set /a n4+=1
        ) else if %%a geq 102 if %%a leq 123 (
            set /a n5+=1
        ) else if %%a geq 124 if %%a leq 146 (
            set /a n6+=1
        ) else if %%a geq 147 if %%a leq 168 (
            set /a n7+=1
        ) else if %%a geq 169 if %%a leq 192 (
            set /a n8+=1
        ) else if %%a geq 193 if %%a leq 213 (
            set /a n9+=1
        ) else if %%a geq 214 if %%a leq 236 (
            set /a n10+=1
        ) else if %%a geq 237 if %%a leq 258 (
            set /a n11+=1
        ) else if %%a geq 259 if %%a leq 281 (
            set /a n12+=1
        ) else if %%a geq 282 if %%a leq 303 (
            set /a n13+=1
        ) else if %%a geq 304 if %%a leq 326 (
            set /a n14+=1
        ) else if %%a geq 327 if %%a leq 348 (
            set /a n15+=1
        ) else (
            set /a n16+=1
        )
    )
)


echo 6月份北东北总共: !n1!
echo 6月份东北总共:!n2!
echo 6月份东东北总共:!n3!
echo 6月份东总共:!n4!
echo 6月份东东南总共:!n5!
echo 6月份东南总共:!n6!
echo 6月份南东南总共:!n7!
echo 6月份南总共: !n8!
echo 6月份南西南总共: !n9!
echo 6月份西南总共: !n10!
echo 6月份西西南总共: !n11!
echo 6月份西总共: !n12!
echo 6月份西西北总共: !n13!
echo 6月份西北总共:!n14!
echo 6月份北西北总共: !n15!
echo 6月份北总共:!n16!
echo 6月份静风总共 !p!个
pause
作者: aliny2003    时间: 2021-8-5 23:28

改了,但是算出来的风统计数据有误。不知道哪里写错了。请高手再指点下。。
作者: aliny2003    时间: 2021-8-5 23:30

回复 7# Batcher


    统计的数据不对,不知道哪里写错了
作者: qixiaobin0715    时间: 2021-8-6 06:36

回复 10# aliny2003
最后一个else有问题。
你用的2个if判断范围属于简写,写法不规范。正常写法应当是:
if ... (
if ...
)
但是比较麻烦,不熟悉的话尽量不要用连续if的写法。北风统计错误对吧:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%a in (K:\feng\mm.txt) do (
  4.     if %%a==PPC (
  5.         set /a p+=1
  6.     ) else (
  7.         if %%a lss 11 (
  8.             set /a n1+=1
  9.         ) else if %%a lss 34 (
  10.             set /a n2+=1
  11.         ) else if %%a lss 57 (
  12.             set /a n3+=1
  13.         ) else if %%a lss 79 (
  14.             set /a n4+=1
  15.         ) else if %%a lss 102 (
  16.             set /a n5+=1
  17.         ) else if %%a lss 124 (
  18.             set /a n6+=1
  19.         ) else if %%a lss 147 (
  20.             set /a n7+=1
  21.         ) else if %%a lss 169 (
  22.             set /a n8+=1
  23.         ) else if %%a lss 193 (
  24.             set /a n9+=1
  25.         ) else if %%a lss 214 (
  26.             set /a n10+=1
  27.         ) else if %%a lss 237 (
  28.             set /a n11+=1
  29.         ) else if %%a lss 259 (
  30.             set /a n12+=1
  31.         ) else if %%a lss 282 (
  32.             set /a n13+=1
  33.         ) else if %%a lss 304 (
  34.             set /a n14+=1
  35.         ) else if %%a lss 327 (
  36.             set /a n15+=1
  37.         ) else if %%a lss 348 (
  38.             set /a n16+=1
  39.         ) else (
  40.             set /a n1+=1
  41.         )
  42.     )
  43. )
  44. echo 6月份北总共:!n1!
  45. echo 6月份北东北总共: !n2!
  46. echo 6月份东北总共:!n3!
  47. echo 6月份东东北总共:!n4!
  48. echo 6月份东总共:!n5!
  49. echo 6月份东东南总共:!n6!
  50. echo 6月份东南总共:!n7!
  51. echo 6月份南东南总共:!n8!
  52. echo 6月份南总共: !n9!
  53. echo 6月份南西南总共: !n10!
  54. echo 6月份西南总共: !n11!
  55. echo 6月份西西南总共: !n12!
  56. echo 6月份西总共: !n13!
  57. echo 6月份西西北总共: !n14!
  58. echo 6月份西北总共:!n15!
  59. echo 6月份北西北总共: !n16!
  60. echo 6月份静风总共 !p!个
  61. pause
复制代码

作者: qixiaobin0715    时间: 2021-8-6 07:03

回复 10# aliny2003
再详细说一下你错在那里,取代码片段:
  1. if %%a geq 327 if %%a leq 348 (
  2.     set /a n15+=1
  3. ) else (
  4.     set /a n16+=1
  5. )
复制代码
相当于:
  1. if %%a gep 327 (
  2.     if %%a leq 348 (
  3.         set /a n15+=1
  4.     ) else (
  5.         set /a n16+=1
  6.     )
  7. )
复制代码
变量!n16!只取到了大于348的个数,0-10的数值未取到。
作者: aliny2003    时间: 2021-8-7 16:32

回复 12# qixiaobin0715


079
099
088
091
093

@echo off
chcp 65001
setlocal enabledelayedexpansion
for /f %%a in (G:\m9.txt) do (
    if %%a==PPC (
        set /a p+=1
    ) else (
        if %%a geq 0 if %%a leq 10 (
            set /a n16+=1
        )else if %%a geq 11 if %%a leq 33 (
            set /a n1+=1
        ) else if %%a geq 34 if %%a leq 56 (
            set /a n2+=1
        ) else if %%a geq 57 if %%a leq 78 (
            set /a n3+=1
        ) else if %%a geq 79 if %%a leq 101 (
            set /a n4+=1
        ) else if %%a geq 102 if %%a leq 123 (
            set /a n5+=1
        ) else if %%a geq 124 if %%a leq 146 (
            set /a n6+=1
        ) else if %%a geq 147 if %%a leq 168 (
            set /a n7+=1
        ) else if %%a geq 169 if %%a leq 192 (
            set /a n8+=1
        ) else if %%a geq 193 if %%a leq 213 (
            set /a n9+=1
        ) else if %%a geq 214 if %%a leq 236 (
            set /a n10+=1
        ) else if %%a geq 237 if %%a leq 258 (
            set /a n11+=1
        ) else if %%a geq 259 if %%a leq 281 (
            set /a n12+=1
        ) else if %%a geq 282 if %%a leq 303 (
            set /a n13+=1
        ) else if %%a geq 304 if %%a leq 326 (
            set /a n14+=1
        ) else if %%a geq 327 if %%a leq 348 (
            set /a n15+=1
        ) else (
            set /a n16+=1
        )
    )
)


echo 1月份北东北总共: !n1!
echo 1月份东北总共:!n2!
echo 1月份东东北总共:!n3!
echo 1月份东总共:!n4!
echo 1月份东东南总共:!n5!
echo 1月份东南总共:!n6!
echo 1月份南东南总共:!n7!
echo 1月份南总共: !n8!
echo 1月份南西南总共: !n9!
echo 1月份西南总共: !n10!
echo 1月份西西南总共: !n11!
echo 1月份西总共: !n12!
echo 1月份西西北总共: !n13!
echo 1月份西北总共:!n14!
echo 1月份北西北总共: !n15!
echo 1月份北总共:!n16!
echo 1月份静风总共 !p!个
pause


为什么统计成“北”n16,不应该是“东”n4
作者: qixiaobin0715    时间: 2021-8-7 16:39

回复 13# aliny2003
改一下for循环试试:
for /f "tokens=* delims=0" %%a in (G:\m9.txt) do (
作者: qixiaobin0715    时间: 2021-8-7 16:46

回复 13# aliny2003
批处理将开头为0的当做8进制数据。所以要去掉数据开头的0,我疏忽了。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2