![Board logo](images/default/logo.gif)
标题: [文本处理] 批处理怎样读取CSV文件判断数值的大小,输出所在行 [打印本页]
作者: luke2 时间: 2021-5-26 16:43 标题: 批处理怎样读取CSV文件判断数值的大小,输出所在行
很多CSV文件, 如果根据设定的值做比较,如果满足条件,则输出所在行,
如检查U1 SRO50 Max BH所在列,如果值大于50,则输出所在行的数据到1.csv中去
U1 SRO50 U1 SRO50 Max BH U1 SRO50 Mean BD
28.67201 39.805706 0 0
31.122015 57.230366 0 0
30.070562 39.39864 0 0
31.15177 62.486103 0 0
29.210333 40.358311 0 0
30.374578 38.970234 0 0
30.356649 39.398304 0 0
27.499838 39.801609 0 0
31.434361 40.040546 0 0
输出结果
31.122015 57.230366 0 0
31.15177 62.486103 0 0
作者: qixiaobin0715 时间: 2021-5-27 10:44
回复 1# luke2 - @echo off
- (for %%a in (*.csv) do (
- for /f "skip=1 tokens=1,2* delims=," %%i in (%%a) do if %%j gtr 50 echo,%%i,%%j,%%k
- ))>1.csv
- pause
复制代码
作者: luke2 时间: 2021-5-27 12:54
回复 2# qixiaobin0715
OCR 3D System Judge Judge2D U1 SRO50 Mean BH U1 SRO50 Min BH U1 SRO50 Max BH U1 SRO50 Mean BD U1 SRO50 Min BD U1 SRO50 Max BD U1 SRO50 Delta+
A0407 V1 MB PASS 36.021465 28.67201 39.805706 0 0 0 3.784241
A0107 V1 MB PASS 36.422462 31.122015 57.230366 0 0 0 20.807903
A0405 V1 MB PASS 35.764618 30.070562 39.39864 0 0 0 3.634022
A0403 V1 MB BRIDGE 36.514278 31.15177 62.486103 0 0 0 25.971825
A0209 V1 MB PASS 35.862968 29.210333 40.358311 0 0 0 4.495342
如何把前面的数据也输出来呢, 输出大于50的数据的整个行数据,如下数据
A0107 V1 MB PASS 36.422462 31.122015 57.230366 0 0 0 20.807903
A0403 V1 MB BRIDGE 36.514278 31.15177 62.486103 0 0 0 25.971825
作者: qixiaobin0715 时间: 2021-5-27 13:08
本帖最后由 qixiaobin0715 于 2021-5-27 21:06 编辑
回复 3# luke2
所以要举实际栗子,未测试:- @echo off
- setlocal enabledelayedexpansion
- (for %%i in (*.csv) do (
- for /f "skip=1 delims=" %%j in (%%i) do (
- for /f "tokens=7 delims=," %%k in ("%%j") do (
- set /a n=%%k
- if !n! geq 50 echo,%%j
- )
- )
- ))>1.csv 2>nul
- pause
复制代码
作者: luke2 时间: 2021-5-27 13:19 标题: RE: 已解决,批处理怎样读取CSV文件判断数值的大小,输出所在行
回复 luke2
所以要举实际栗子,未测试:
qixiaobin0715 发表于 2021-5-27 13:08 ![](http://www.bathome.net/images/common/back.gif)
(for %%i in (*.csv) do (
更新下
(for %%a in (*.csv) do (
完美解决,太感谢了
作者: WHY 时间: 2021-5-27 20:34
回复 4# qixiaobin0715
if 6.32 GTR 50 echo TRUE
作者: WHY 时间: 2021-5-27 20:39
PowerShell "type *.csv | ?{ 1*($_ -split ',')[6] -gt 50 }" 2>nul
作者: luke2 时间: 2021-5-27 20:55
回复 qixiaobin0715
if 6.32 GTR 50 echo TRUE
WHY 发表于 2021-5-27 20:34 ![](http://www.bathome.net/images/common/back.gif)
非常之感谢您的信息
作者: luke2 时间: 2021-5-27 20:56
PowerShell "type *.csv | ?{ 1*($_ -split ',')[6] -gt 50 }" 2>nul
WHY 发表于 2021-5-27 20:39 ![](http://www.bathome.net/images/common/back.gif)
没使用过Powershell 代码
作者: qixiaobin0715 时间: 2021-5-27 21:07
本帖最后由 qixiaobin0715 于 2021-5-27 21:08 编辑
回复 6# WHY
忘了浮点问题了,修复后应当可以,已修改
作者: Gin_Q 时间: 2021-5-28 09:42
C#- using System;
- using System.IO;
- using System.Linq;
- using System.Collections.Generic;
-
- class Program
- {
- static void Main()
- {
- string[] lines = File.ReadAllLines("data.txt");
-
-
- var newLines = lines.ToList();
-
- // 去掉标题
- newLines.RemoveRange(0, 1);
- // int SkipSomeLines = 1;
- // newLines.RemoveAll(
- // ParameterAbandonment =>
- // {
- // SkipSomeLines--;
- // if (SkipSomeLines >= 0)
- // {
- // return true;
- // }
- // else
- // {
- // return false;
- // }
- // }
- // );
-
- var MaxScore =
- from line in newLines
- let each = line.Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries)
- where Convert.ToDouble(each[6]) > 50
- select line;
-
- foreach (var n in MaxScore)
- {
- Console.WriteLine(n);
- }
-
- Console.ReadLine();
- }
- }
复制代码
- A0107 V1 MB PASS 36.422462 31.122015 57.230366 0 0 0 20.807903
- A0403 V1 MB BRIDGE 36.514278 31.15177 62.486103 0 0 0 25.971825
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |