找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28321|回复: 10

[文本处理] 批处理怎样读取CSV文件判断数值的大小,输出所在行

[复制链接]
发表于 2021-5-26 16:43:10 | 显示全部楼层 |阅读模式
很多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
发表于 2021-5-27 10:44:36 | 显示全部楼层
回复 1# luke2
  1. @echo off
  2. (for %%a in (*.csv) do (
  3.     for /f "skip=1 tokens=1,2* delims=," %%i in (%%a) do if %%j gtr 50 echo,%%i,%%j,%%k
  4. ))>1.csv
  5. pause
复制代码
 楼主| 发表于 2021-5-27 12:54:38 | 显示全部楼层
回复 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
发表于 2021-5-27 13:08:25 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2021-5-27 21:06 编辑

回复 3# luke2
所以要举实际栗子,未测试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for %%i in (*.csv) do (
  4.     for /f "skip=1 delims=" %%j in (%%i) do (
  5.         for /f "tokens=7 delims=," %%k in ("%%j") do (
  6.             set /a n=%%k
  7.             if !n! geq 50 echo,%%j
  8.         )
  9.     )
  10. ))>1.csv 2>nul
  11. pause
复制代码
 楼主| 发表于 2021-5-27 13:19:16 | 显示全部楼层

RE: 已解决,批处理怎样读取CSV文件判断数值的大小,输出所在行

回复  luke2
所以要举实际栗子,未测试:
qixiaobin0715 发表于 2021-5-27 13:08



    (for %%i in (*.csv) do (
更新下
(for %%a in (*.csv) do (


完美解决,太感谢了
发表于 2021-5-27 20:34:54 | 显示全部楼层
回复 4# qixiaobin0715


    if 6.32 GTR 50 echo TRUE
发表于 2021-5-27 20:39:26 | 显示全部楼层
PowerShell "type *.csv | ?{ 1*($_ -split ',')[6] -gt 50 }" 2>nul
 楼主| 发表于 2021-5-27 20:55:06 | 显示全部楼层
回复  qixiaobin0715


    if 6.32 GTR 50 echo TRUE
WHY 发表于 2021-5-27 20:34



非常之感谢您的信息
 楼主| 发表于 2021-5-27 20:56:27 | 显示全部楼层
PowerShell "type *.csv | ?{ 1*($_ -split ',')[6] -gt 50 }" 2>nul
WHY 发表于 2021-5-27 20:39


没使用过Powershell 代码
发表于 2021-5-27 21:07:29 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2021-5-27 21:08 编辑

回复 6# WHY
忘了浮点问题了,修复后应当可以,已修改
发表于 2021-5-28 09:42:33 | 显示全部楼层
C#
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Collections.Generic;

  5. class Program
  6. {
  7.     static void Main()
  8.     {
  9.         string[] lines = File.ReadAllLines("data.txt");
  10.             
  11.         
  12.         var newLines = lines.ToList();
  13.         
  14.         // 去掉标题
  15.         newLines.RemoveRange(0, 1);
  16.         // int SkipSomeLines = 1;
  17.         // newLines.RemoveAll(
  18.             // ParameterAbandonment =>
  19.             // {
  20.                 // SkipSomeLines--;
  21.                 // if (SkipSomeLines >= 0)
  22.                 // {
  23.                     // return true;
  24.                 // }
  25.                 // else
  26.                 // {
  27.                     // return false;   
  28.                 // }
  29.             // }
  30.         // );
  31.         
  32.         var MaxScore =
  33.             from line in newLines
  34.             let each = line.Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries)
  35.             where Convert.ToDouble(each[6]) > 50
  36.             select line;
  37.         
  38.         foreach (var n in MaxScore)
  39.         {
  40.             Console.WriteLine(n);
  41.         }
  42.         
  43.         Console.ReadLine();
  44.     }
  45. }
复制代码
  1. A0107        V1        MB        PASS        36.422462        31.122015        57.230366        0        0        0        20.807903
  2. A0403        V1        MB        BRIDGE        36.514278        31.15177        62.486103        0        0        0        25.971825
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 17:25 , Processed in 0.033926 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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