[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样读取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

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
复制代码
QQ:1972544783

TOP

本帖最后由 qixiaobin0715 于 2021-5-27 21:08 编辑

回复 6# WHY
忘了浮点问题了,修复后应当可以,已修改

TOP

PowerShell "type *.csv | ?{ 1*($_ -split ',')[6] -gt 50 }" 2>nul
WHY 发表于 2021-5-27 20:39


没使用过Powershell 代码

TOP

回复  qixiaobin0715


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



非常之感谢您的信息

TOP

PowerShell "type *.csv | ?{ 1*($_ -split ',')[6] -gt 50 }" 2>nul

TOP

回复 4# qixiaobin0715


    if 6.32 GTR 50 echo TRUE

TOP

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

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



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


完美解决,太感谢了

TOP

本帖最后由 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
复制代码

TOP

回复 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

TOP

回复 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
复制代码

TOP

返回列表