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

[文本处理] 批处理如何把TXT转换为dat文件?

[复制链接]
 楼主| 发表于 2022-7-29 21:36:30 | 显示全部楼层
回复 15# LJY4.0


    我也不太懂,估计是个二进制的dat
 楼主| 发表于 2022-7-29 22:55:07 | 显示全部楼层
回复 15# LJY4.0
刚才查了一下说是float类型;
    单纯的4字节浮点类型
 楼主| 发表于 2022-7-29 23:08:34 | 显示全部楼层
可能是编码问题,转换编码问题可从论坛里搜索。
qixiaobin0715 发表于 2022-7-29 12:15



    老师,生成的dat是浮点格式的,麻烦您弄一下
发表于 2022-7-30 08:51:55 | 显示全部楼层
回复 2# 领航


请找一个你的通信软件可以识别的dat文件作为例子。
如果需要上传文件,可以用阿里云盘或百度网盘。
 楼主| 发表于 2022-7-30 16:01:35 | 显示全部楼层
回复 19# Batcher

这个可以被读取
    https://wwn.lanzout.com/iM6nj08oj3xi
发表于 2022-7-30 17:25:42 | 显示全部楼层
回复 20# 领航


文件里没有1,2列
只有3和4列,32位按小端排序
发表于 2022-7-30 18:13:09 | 显示全部楼层
本帖最后由 flashercs 于 2022-7-31 18:19 编辑
  1. <#*,:&cls
  2. @echo off
  3. cd /d "%~dp0"
  4. powershell -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create((Get-Content -LiteralPath "%~f0" -ReadCount 0 | Out-String)))"
  5. pause
  6. exit /b
  7. #>
  8. $txtpath = "c:\txt\a.txt"
  9. $dirdata = "c:\news\1001"
  10. $dicDataPath = @{}
  11. $rootdir = [System.IO.Directory]::CreateDirectory($dirdata)
  12. foreach ($line in (Get-Content -LiteralPath $txtpath -ReadCount 0)) {
  13.   if ($line -match '^\s*$') {
  14.     continue
  15.   }
  16.   $a, $b, $c, $d = $line -split '\|'
  17.   $datapath = [System.IO.Path]::Combine($rootdir.FullName, "${a}_${b}.dat")
  18.   if (-not $dicDataPath.ContainsKey($datapath)) {
  19.     $dicDataPath[$datapath] = 1
  20.     $filemode = [System.IO.FileMode]::Create
  21.   } else {
  22.     $filemode = [System.IO.FileMode]::Append
  23.   }
  24.   try {
  25.     $stream = New-Object System.IO.FileStream -ArgumentList @($datapath, $filemode, [System.IO.FileAccess]::Write, [System.IO.FileShare]::Read)
  26.     $bw = New-Object System.IO.BinaryWriter -ArgumentList $stream
  27.     $bw.Write($c -as [int])
  28.     $bw.Write($d -as [float])
  29.   } finally {
  30.     if ($bw) {
  31.       $bw.Close()
  32.       $bw = $null
  33.     }
  34.     if ($stream) {
  35.       $stream.Close()
  36.       $stream = $null
  37.     }
  38.   }
  39.   trap {}
  40. }
复制代码

评分

参与人数 1技术 +1 收起 理由
领航 + 1 乐于助人

查看全部评分

 楼主| 发表于 2022-7-30 21:34:13 | 显示全部楼层
回复 22# flashercs

请老师看看,
方法调用失败,因为 [System.String] 不包含名为“IsNullOrWhiteSpace”的方法。
所在位置 行:12 字符: 35
+   if ([string]::IsNullOrWhiteSpace <<<< ($line)) {
    + CategoryInfo          : InvalidOperation: (IsNullOrWhiteSpace:String) []
   , RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

方法调用失败,因为 [System.IO.BinaryWriter] 不包含名为“Dispose”的方法。
所在位置 行:24 字符: 18
+       $bw.Dispose <<<< ()
    + CategoryInfo          : InvalidOperation: (Dispose:String) [], RuntimeEx
   ception
    + FullyQualifiedErrorId : MethodNotFound
 楼主| 发表于 2022-7-30 21:35:12 | 显示全部楼层
回复 21# idwma


    不会弄,请老师帮助
 楼主| 发表于 2022-7-30 21:55:11 | 显示全部楼层
flashercs 发表于 2022-7-30 18:13


请除了那个报错,
  请问老师,如何解决增量问题
下面的内容中,日期和数量有变化,如何补充到对应的dat文件中呢?

0|000821|20220725|42156
0|002204|20220725|3332832
1|603982|20220725|735065
发表于 2022-7-30 22:46:00 | 显示全部楼层
本帖最后由 flashercs 于 2022-7-30 22:47 编辑

回复 25# 领航


    楼上代码修复了错误,你试试.
日期更新的 行 放到a.txt 下面,会替换原来的文件.
如:
  1. 1|603982|20220722|39200819
  2. 1|603982|20220725|735065
复制代码
下行会替换上行数据.
 楼主| 发表于 2022-7-31 10:33:41 | 显示全部楼层
本帖最后由 领航 于 2022-7-31 12:39 编辑

回复 26# flashercs


    谢谢老师修正!
现在的问题是解决增量问题;
b.txt内容
0|000821|20220725|42156
0|002204|20220725|3332832
1|603982|20220725|735065

当b.txt日期和数量发生变化,如何补充到对应的dat文件中呢?不是替换覆盖,是增量
当日期相同的时候,可以替换覆盖
当日期不同的时候,在dat里面增补一条记录


附件例子是多条记录:https://wwn.lanzout.com/imzg808q4jyh
发表于 2022-7-31 16:07:43 | 显示全部楼层
回复 27# 领航


    修改了增量问题.你需要测试一下
 楼主| 发表于 2022-7-31 17:14:15 | 显示全部楼层
本帖最后由 领航 于 2022-7-31 17:16 编辑

回复 28# flashercs


    经测试可增补,但存在软件读取不到问题,怀疑与附件的datacfg.dat这个文件有关联,可能是每次增补一次数据,就向datacfg.dat这个文件补充一条记录,我打不开datacfg.dat这个文件,特发附件请老师分析解决
https://wwn.lanzout.com/iYlXa08r1lyh
发表于 2022-7-31 17:55:00 | 显示全部楼层
回复 29# 领航


    不知道datacfg.dat的数据是什么格式.无法判断原因
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 19:49 , Processed in 0.018331 second(s), 6 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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