批处理读取文本第n行并赋值给变量?--遍历所有行并赋值给变量数组

::TraceLines.bat
@goto :test1

http://www.bathome.net/thread-27229-1-1.html#批处理如何获取txt文本中某行某列的内容/指定行指定列的内容
http://www.bathome.net/thread-47304-1-1.html#如何用批处理读取文本第二行并赋值给变量?
https://github.com/npocmaka/batch.scripts/blob/master/fileUtils/tailHead.bat
关联 .lnk: "文件查看:查找文件的第m行第n列.bat"

:test1
	@echo off&setlocal EnableDelayedExpansion
	chcp 936
    set my=hi baby
	rem 空行: 只含有空白字符(cr,space,tab,bs)的行不算空行。
	rem crlf 或 lf 算换行,单独的 cr 不算换行。crlf 或 lf 不计入本行空白字符内。
	set #m=1
	set #n=18
	rem 取从第 #m 行起到第 #n 行中的最后一个非空行。
	rem 好处是兼容特殊字符,不需要写文件。
	(for /l %%a in (!#m! 1 !#n!) do set /p Target=)<"%TEMP%\$"
	set Target

	rem 统计文本行数,最后一个空行不计入总数。
	for /f "tokens=*" %%a in ('type "%TEMP%\$" ^| find /c /v ""') do set sum=%%a
	echo "sum=!sum!"
	rem 遍历文件,取出所有非空行,赋值给 Line00X
	(for /l %%a in (1 1 !sum!) do (set /a no=%%a+1000&set /p Line!no:~1!=))<"%TEMP%\$"
	set Line&pause
@goto :EOF

代码:

:: ---------------------------------------------------------------------------------------------------------------------

::TraceLines.bat
@goto :test1

http://www.bathome.net/thread-27229-1-1.html#批处理如何获取txt文本中某行某列的内容/指定行指定列的内容
http://www.bathome.net/thread-47304-1-1.html#如何用批处理读取文本第二行并赋值给变量?
https://github.com/npocmaka/batch.scripts/blob/master/fileUtils/tailHead.bat
关联 .lnk: "文件查看:查找文件的第m行第n列.bat"

:test1
    @echo off&setlocal EnableDelayedExpansion
    chcp 936
    set my=hi baby
    rem 空行: 只含有空白字符(cr,space,tab,bs)的行不算空行。
    rem crlf 或 lf 算换行,单独的 cr 不算换行。crlf 或 lf 不计入本行空白字符内。
    set #m=1
    set #n=18
    rem 取从第 #m 行起到第 #n 行中的最后一个非空行。
    rem 好处是兼容特殊字符,不需要写文件。
    (for /l %%a in (!#m! 1 !#n!) do set /p Target=)<"%TEMP%\$"
    set Target

    rem 统计文本行数,最后一个空行不计入总数。
    for /f "tokens=*" %%a in ('type "%TEMP%\$" ^| find /c /v ""') do set sum=%%a
    echo "sum=!sum!"
    rem 遍历文件,取出所有非空行,赋值给 Line00X
    (for /l %%a in (1 1 !sum!) do (set /a no=%%a+1000&set /p Line!no:~1!=))<"%TEMP%\$"
    set Line&pause
@goto :EOF

:: ---------------------------------------------------------------------------------------------------------------------

测试文本(%TEMP%\$):

注意: 文件编码格式为 GB2312(简体中文)

如何输入 cr 或 lf ? 使用 Notepad++ hexeditor 插件,找到 crlf , 选中 cr 或 lf , ctrl+x

:: ---------------------------------------------------------------------------------------------------------------------


 2:
 3:F:\快捷方式\Start Menu 开始菜单\!TEMP!.lnk

 5:F:\快捷方式\Start Menu 开始菜单\%CommonProgramFiles(x86)%.lnk
	tab
 7:F:\快捷方式\Start Menu 开始菜单\%TEMP%.lnk
 8:blank1 
 
10:blank3

12:CR1 

14:CR3 

16:C:\;set a=`@#$^&_+-={[}]));)( ''', !temp!,!my!,%temp%,%my%; if !%~1!==!%%~2!;%1,%~2%,%~; ^,^^,^^^,^^^^, !!,!,!!!, %%,%,%%%, ...txt (2).lnk



20:LF

22:aaa

24:C:\;set a=`@#$^&_+-={[}]));)( ''', !temp!,!my!,%temp%,%my%; if !%~1!==!%%~2!;%1,%~2%,%~; ^,^^,^^^,^^^^, !!,!,!!!, %%,%,%%%, ...txt.lnk
25:	 one

27:two

29:three

:: ---------------------------------------------------------------------------------------------------------------------

测试文本(%TEMP%\$)截图:

:: ---------------------------------------------------------------------------------------------------------------------

测试结果截图:

总结:

1 bat 里要把命令赋值给变量,除了 for...in('command')... , 就是 command>file, set/p var=<file

   这两者都是有缺点的,前者 in() 会把 command 结果里的 %TEMP% ,!TEMP! 变量展开。

   后者要写文件,在大批量运算时,会非常慢。

2 本文代码的好处是不用写文件,或者说只写一次。而且还兼容所有特殊字符。缺点是set /p 输入的行长度不能超过1024

至于控制字符。。。呃,有点超纲了~~

3 想要测试是否兼容各种特殊字符,可以把 line022 拆出来,一个个特殊字符去测试。这里我就不说了,有勤劳的小蜜蜂吗?搞出亿点点例子来,测出不兼容的例子,请踢我一脚。

在使用MATLAB批量读取Excel将其赋值数组之前,首先需要确保已安装MATLAB的Excel插件。以下是使用MATLAB进批量读取Excel数据的步骤: 1. 使用dir函数获取指定目录下的所有Excel文件名,存储在一个结构体数组中。 2. 使用循环遍历结构体数组,逐个打开Excel文件。 3. 使用xlsread函数读取Excel文件中的数据,将其赋值一个变量。 4. 将读取的数据存储到一个数组中,可以使用cell数组或者矩阵数组,具体根据Excel数据的类型而定。 5. 关闭Excel文件。 6. 循环结束后,得到存储了所有Excel文件数据的数组。 下面是一个示例代码: ``` % 指定需要读取的Excel文件所在的目录 dirPath = '你的目录路径'; % 使用dir函数获取指定目录下的所有Excel文件名 fileList = dir(fullfile(dirPath, '*.xlsx')); % 初始化一个空的数组,用于存储所有Excel文件的数据 dataArray = {}; % 使用循环遍历结构体数组,逐个打开Excel文件读取数据 for i = 1:length(fileList) % 获取当前Excel文件的完整路径 filePath = fullfile(dirPath, fileList(i).name); % 使用xlsread函数读取Excel文件中的数据 data = xlsread(filePath); % 将读取的数据存储到数组中 dataArray{i} = data; % 关闭Excel文件 % 如果使用的是xlsread函数,则不需要手动关闭文件 % 如果使用的是actxserver函数,则需要调用Close方法关闭文件 end % 循环结束后,得到存储了所有Excel文件数据的数组dataArray ``` 需要注意的是,上述代码中的数据存储方式为每个Excel文件的数据存储在dataArray数组一个元素中,即dataArray{1}为第一个Excel文件的数据,dataArray{2}为第二个Excel文件的数据,以此类推。如果需要将所有数据整合到一个大的数组中,可以在循环过程中使用cat函数或vertcat函数将每个Excel文件的数据进
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值