【求助】把一个文件夹下N个txt文件中的16进制转成10进制保存
本帖最后由 guxingganyue 于 2013-5-7 08:36 编辑如题:我要把一个文件夹下的N个txt文件中的16进制转成10进制,且把数据间的空格变成换行。谁会用批处理实现呢?
现在我的笨方法是:用notepad++把数据间的空格替换成换行。然后再把数据放到excel中再转成10进制,效率太低。
故来求教高人能否用批处理实现---->把这个批处理文件放到文件夹中,运行批处理后就把当前文件夹下的所有txt文件中的数据安装上面的方法转换并保存(可以直接覆盖源文件,或者再新建
一个文件也可以,哪个方便用那种方法)
注:数据是我用串口发送到sscom3.2中,hex显示保存的文件。里面全是16进制的字符、空格、回车换行,没有其他字符。
txt格式:
源文件数据:4B 4E 53 58 64 6A 6F 75 79 7D
转换完后的数据:
75
78
83
88
100
106
111
117
121
125
文件夹下的txt文件:
刚写的,不知道满足要求不 zouzhichao 发表于 2013-5-7 09:19 static/image/common/back.gif
刚写的,不知道满足要求不
多谢,我试试 源代码,VC编译,你自己看着改吧,很简单
int HexTransfer(const char* FileNameSrc, const char* FileNameDst)
{
FILE* FileSrc = fopen(FileNameSrc, "r");
if (!FileSrc)
return -1;
FILE* FileDst = fopen(FileNameDst, "w");
if (!FileDst)
return -1;
int Data;
for ( ; 0 == feof(FileSrc); )
{
if (fscanf(FileSrc, "%X", &Data) != 1)
break;
if (fprintf(FileDst, "%d\r\n", Data) == 0)
break;
}
fclose(FileSrc);
fclose(FileDst);
return 0;
} 批处理文件格式:
HexTransfer test0.txt
HexTransfer test1.txt
HexTransfer test2.txt
HexTransfer test3.txt
pause
运行生成 copy_test0.txt, copy_test1.txt, copy_test2.txt, copy_test4.txt 批处理文件格式(指定生成文件名):
HexTransfer test0.txt test_a.txt
HexTransfer test1.txt test_b.txt
HexTransfer test2.txt test_c.txt
HexTransfer test3.txt test_d.txt
pause 源文件名和输出文件名不要重名 本帖最后由 guxingganyue 于 2013-5-7 09:31 编辑
zouzhichao 发表于 2013-5-7 09:19 static/image/common/back.gif
刚写的,不知道满足要求不
刚测试了,转换的结果和格式都是正确的。。。
但是你是转换指定文件名的文件。
能不能改成:转换当前文件夹下所有的文件呢。不要指定文件名,运行bat后自动把所有文件都转了。 zouzhichao 发表于 2013-5-7 09:21 static/image/common/back.gif
源代码,VC编译,你自己看着改吧,很简单
int HexTransfer(const char* FileNameSrc, const char* FileName ...
电脑重装后VC一直没来得及装上,VC不是很熟。。 你再看看可行否 全部源码
#include "stdafx.h"
#include "string.h"
#include "afx.h"
int HexTransfer(const char* FileNameSrc, const char* FileNameDst)
{
FILE* FileSrc = fopen(FileNameSrc, "r");
if (!FileSrc)
return -1;
FILE* FileDst = fopen(FileNameDst, "w");
if (!FileDst)
return -1;
int Data;
for ( ; 0 == feof(FileSrc); )
{
if (fscanf(FileSrc, "%X", &Data) != 1)
break;
if (fprintf(FileDst, "%d\r\n", Data) == 0)
break;
}
fclose(FileSrc);
fclose(FileDst);
return 0;
}
int FolderDeal(const char* Folder)
{
CFileFind File;
if (strstr(Folder, (const char*)"*"))
return -1;
if (File.FindFile(Folder))
return -1;
return CreateDirectory(Folder, NULL);
}
int FileDeal(const char* FileSrc, const char* FolderDst)
{
CFileFind File;
int Amount = 0;
int Res = File.FindFile(FileSrc);
char Buffer = {0x00};
for ( ; Res; )
{
Res = File.FindNextFile();
if (!File.IsDirectory())
{
strcpy((char*)Buffer, FolderDst);
strcat((char*)Buffer, (const char*)"\\");
strcat((char*)Buffer, (const char*)File.GetFileName());
if (HexTransfer((const char*)File.GetFileName(), (const char*)Buffer))
printf("文件 %s 转换错误!\r\n", (const char*)File.GetFileName());
else
{
printf("文件 %s 转换成功!\r\n", (const char*)File.GetFileName());
Amount++;
}
}
}
printf("共转换 %d 个文件!\r\n", Amount);
return Amount;
}
int main(int argc, char* argv[])
{
if (3 != argc)
{
printf("输入参数错误!\r\n");
return 0;
}
FolderDeal((const char*)argv);
if (FileDeal((const char*)argv, (const char*)argv) == 0)
return 0;
return 0;
} zouzhichao 发表于 2013-5-7 10:44 static/image/common/back.gif
全部源码
#include "stdafx.h"
#include "string.h"
再次感谢!!!
这次输出的文件换行时多了一个回车。。。。虽然用记事本看不出来,但是用notepad++就可以了。。
能把这个多余的回车去掉吗?
把源文件里所有的 \r\n 换成 \n就可以了 zouzhichao 发表于 2013-5-7 15:06 static/image/common/back.gif
把源文件里所有的 \r\n 换成 \n就可以了
这次对了。。。。
现在可以实现我的功能了,多谢。。。
虽然你没完全用批处理写,但是功能达到了,分数就给你了。。。 这个程序有一个不完整的地方:文件名中不要有空格,如test 001.txt这种。我看你截图里面的那些文件名都没有空格,也就没有弄那个空格符的处理了,如果有要求再提 guxingganyue 发表于 2013-5-7 15:12 static/image/common/back.gif
这次对了。。。。
现在可以实现我的功能了,多谢。。。
{:handshake:} 不客气 zouzhichao 发表于 2013-5-7 15:14 static/image/common/back.gif
这个程序有一个不完整的地方:文件名中不要有空格,如test 001.txt这种。我看你截图里面的那些文件名都没有 ...
嗯,这个程序应付我的应用足够了。。。
文件名中确实不会有空格的 这个也有用,顶一个
页:
[1]