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

【已解决】WPS从10万条数据中找记录,耗时1小时,有什么快的方法

本帖最后由 朱科技 于 2022-12-28 10:40 编辑

WPS从10万条数据中找记录,耗时1小时,有什么快的方法
附件链接: https://pan.baidu.com/s/1utKLL5Dwxeu3MgR1AcnErQ 提取码: khw2
毕竟没有老师教,自学很痛苦的

样例文件怎样的

TOP

wps?
用 excel 试试
或者导出 csv 用 grep

TOP

无法上传附件呀
毕竟没有老师教,自学很痛苦的

TOP

回复 2# a20150604


    上传不了附件
毕竟没有老师教,自学很痛苦的

TOP

回复 3# newswan


    上传不了附件
毕竟没有老师教,自学很痛苦的

TOP

毕竟没有老师教,自学很痛苦的

TOP

回复 7# 朱科技


    你怎么操作的,要那么长时间

TOP

本帖最后由 slimay 于 2021-8-8 15:26 编辑

解法零:WPS函数法 也只用2秒
在明细中构造 列并 G列=A2&":"&E2&":"&F2,  行号 H列 = ROW(A2)下拉扩展所有行
然后使用vlookup直接检索列并 G列的内容  = VLOOKUP("YT5692687908699:无锡中心:下车扫描",  明细!G:H,2,FALSE)
返回的就是行号. 通过构造列并, 将查询耗时缩短到 2秒左右.亲测6万行只需1秒左右
  1. 查询订单号 查询集散地 查询扫描状态
  2. YT5692687908699 无锡中心 下车扫描
  3. 查询结果(列并) 查询到的行号
  4. YT5692687908699:无锡中心:下车扫描 11
复制代码
解法一: C语言 20万行 0.01秒实测
这种问题,不用C,你很难做到毫秒级解决问题
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #define LINE_SIZE 1024
  6. char* yundanSN = "YT5692687908699";
  7. char* yundanAddress = "无锡中心";
  8. char* yundanState = "下车扫描";
  9. int main( int argc, char** argv )
  10. {
  11. if(argc != 2)
  12. {
  13. printf("Usage: argv[0] \"*.csv\"\n");
  14. exit(1);
  15. }
  16. FILE* fp = fopen(argv[1], "rb");
  17. if(fp == NULL)
  18. {
  19. printf("%s\n", "Error list file.");
  20. exit(1);
  21. }
  22. char line[LINE_SIZE + 1];
  23. line[0] = 0x00;
  24. int lineNum = 0;
  25. while(! feof(fp))
  26. {
  27. lineNum ++;
  28. fgets(line, LINE_SIZE, fp);
  29. if(strstr(line, yundanSN) && strstr(line, yundanAddress) && strstr(line, yundanState))
  30. {
  31. printf("SN:%s, LINE_SN:%d\n", yundanSN, lineNum);
  32. break;
  33. }
  34. }
  35. fclose(fp);
  36. return 0;
  37. }
复制代码
解法二: 批处理 2万行 10秒实测
批处理搞定
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "查询运单编号=YT5692687908699"
  4. set "查询运单地址=无锡中心"
  5. set "查询运单状态=下车扫描"
  6. set 行号=0
  7. for /f "delims=, tokens=1-3" %%a in ('more +35 "%~f0"') do (
  8. set/a "行号+=1"
  9. if not defined #%%a (
  10. if "%%a"=="%查询运单编号%" (
  11. if "%%b"=="%查询运单地址%" (
  12. if "%%c"=="%查询运单状态%" (
  13. set "#%%a=!行号!"
  14. )
  15. )
  16. )
  17. )
  18. )
  19. echo 运单编号         行号
  20. for /f "tokens=1,2 delims=#=" %%a in ('set #') do (
  21. echo;%%a  %%b
  22. )
  23. pause
  24. REM 数据粘贴区
  25. 运单号,操作时间,操作频次,操作网点编号,操作网点名称,操作名称
  26. YT5692687908699,2,3,4,广东省江门市,业务员收件
  27. YT5692687908699,2,3,4,广东省江门市,揽收扫描
  28. YT5692687908699,,,,广东省江门市,下车扫描
  29. YT5692687908699,,,,广东省江门市,装件入包扫描
  30. YT5692687908699,,,,广东省江门市,装件入车扫描
  31. YT5692687908699,,,,广东省江门市,发车扫描
  32. YT5692687908699,,,,江门中心,到车扫描
  33. YT5692687908699,,,,江门中心,下车扫描
  34. YT5692687908699,,,,江门中心,装件入车扫描
  35. YT5692687908699,,,,无锡中心,下车扫描
  36. YT5692687908699,,,,无锡中心,下车扫描
  37. YT5692687908699,,,,无锡中心,装件入车扫描
  38. YT5692687908699,,,,新区春潮一部,下车扫描
  39. YT5692687908699,,,,经济开发区,下车扫描
  40. YT5692687908699,,,,经济开发区,装件入车扫描
  41. YT5692687908699,,,,无锡中心,下车扫描
  42. YT5692687908699,,,,无锡中心,装件入车扫描
  43. YT5692687908699,,,,新区,下车扫描
  44. YT5692687908699,2,3,4,广东省江门市,业务员收件
  45. YT5692687908699,2,3,4,广东省江门市,揽收扫描
  46. YT5692687908699,,,,广东省江门市,下车扫描
  47. YT5692687908699,,,,广东省江门市,装件入包扫描
  48. YT5692687908699,,,,广东省江门市,装件入车扫描
  49. YT5692687908699,,,,广东省江门市,发车扫描
  50. YT5692687908699,,,,江门中心,到车扫描
  51. YT5692687908699,,,,江门中心,下车扫描
  52. YT5692687908699,,,,江门中心,装件入车扫描
  53. YT5692687908699,,,,无锡中心,下车扫描
  54. YT5692687908699,,,,无锡中心,下车扫描
  55. YT5692687908699,,,,无锡中心,装件入车扫描
  56. YT5692687908699,,,,新区春潮一部,下车扫描
  57. YT5692687908699,,,,经济开发区,下车扫描
  58. YT5692687908699,,,,经济开发区,装件入车扫描
  59. YT5692687908699,,,,无锡中心,下车扫描
  60. YT5692687908699,,,,无锡中心,装件入车扫描
  61. YT5692687908699,,,,新区,下车扫描
  62. YT5692687908699,2,3,4,广东省江门市,业务员收件
  63. YT5692687908699,2,3,4,广东省江门市,揽收扫描
  64. YT5692687908699,,,,广东省江门市,下车扫描
  65. YT5692687908699,,,,广东省江门市,装件入包扫描
  66. YT5692687908699,,,,广东省江门市,装件入车扫描
  67. YT5692687908699,,,,广东省江门市,发车扫描
  68. YT5692687908699,,,,江门中心,到车扫描
  69. YT5692687908699,,,,江门中心,下车扫描
复制代码
1

评分人数

TOP

表1有5000条,明细表有20万条,用VB宏能行吗
毕竟没有老师教,自学很痛苦的

TOP

回复 9# slimay


   
表1有5000条,明细表有20万条,用VB宏能行吗
毕竟没有老师教,自学很痛苦的

TOP

本帖最后由 slimay 于 2021-8-8 17:05 编辑

回复 11# 朱科技
可以的,用来VB宏,连vlookup都省了, VB直接就能for循环, 不需要vlookup了,但是你的程序要兼容VB宏, 不同电脑对VB宏的兼容性不一样. 我以前写过宏,但是放到别的电脑上运行,出现宏兼容性问题.
就用vlookup吧,添加两列辅助列,  5000行, 20万数据源也是十几秒出结果.
如果用C语言, 多线程, 关键词编码, 实现上亿条数据的查询,也是不超过5秒. 你就是把五大快递公司的数据都弄过来,我用C查也不会超过30秒.十几亿级数据并发高速查询

TOP

回复 12# slimay


    实际操作和你说的不切实际,取值确实 是耗时40分钟-小时左右
毕竟没有老师教,自学很痛苦的

TOP

本帖最后由 slimay 于 2021-8-8 17:10 编辑

回复 13# 朱科技
我用的100元的CPU,也就1秒出结果了,你把你的函数贴出来, 我看看你怎么写的,不会这么慢的, 肯定是你的表格函数有问题,做了无用的功,导致反应变慢

TOP

回复 14# slimay


    有6列都是用的这个公式,也就是6列5000行
=SMALL(IFERROR(IF((走件流程!$A$1A$600000=C4)*(走件流程!$E$1:$E$600000="无锡转运中心")*(走件流程!$F$1:$F$600000="下车扫描"),ROW(走件流程!$E$1:$E$600000)),9^9),1)
毕竟没有老师教,自学很痛苦的

TOP

返回列表