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


    我也不太懂,估计是个二进制的dat

TOP

回复 15# LJY4.0
刚才查了一下说是float类型;
    单纯的4字节浮点类型

TOP

可能是编码问题,转换编码问题可从论坛里搜索。
qixiaobin0715 发表于 2022-7-29 12:15



    老师,生成的dat是浮点格式的,麻烦您弄一下

TOP

回复 2# 领航


请找一个你的通信软件可以识别的dat文件作为例子。
如果需要上传文件,可以用阿里云盘或百度网盘。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 19# Batcher

这个可以被读取
    https://wwn.lanzout.com/iM6nj08oj3xi

TOP

回复 20# 领航


文件里没有1,2列
只有3和4列,32位按小端排序

TOP

本帖最后由 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

评分人数

微信:flashercs
QQ:49908356

TOP

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

TOP

回复 21# idwma


    不会弄,请老师帮助

TOP

flashercs 发表于 2022-7-30 18:13


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

0|000821|20220725|42156
0|002204|20220725|3332832
1|603982|20220725|735065

TOP

本帖最后由 flashercs 于 2022-7-30 22:47 编辑

回复 25# 领航


    楼上代码修复了错误,你试试.
日期更新的 行 放到a.txt 下面,会替换原来的文件.
如:
  1. 1|603982|20220722|39200819
  2. 1|603982|20220725|735065
复制代码
下行会替换上行数据.
微信:flashercs
QQ:49908356

TOP

本帖最后由 领航 于 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

TOP

回复 27# 领航


    修改了增量问题.你需要测试一下
微信:flashercs
QQ:49908356

TOP

本帖最后由 领航 于 2022-7-31 17:16 编辑

回复 28# flashercs


    经测试可增补,但存在软件读取不到问题,怀疑与附件的datacfg.dat这个文件有关联,可能是每次增补一次数据,就向datacfg.dat这个文件补充一条记录,我打不开datacfg.dat这个文件,特发附件请老师分析解决
https://wwn.lanzout.com/iYlXa08r1lyh

TOP

回复 29# 领航


    不知道datacfg.dat的数据是什么格式.无法判断原因
微信:flashercs
QQ:49908356

TOP

返回列表