标题: 【完成】60元求批处理——汉字加减 [打印本页]
作者: lxh623 时间: 2020-8-27 20:57 标题: 【完成】60元求批处理——汉字加减
本帖最后由 lxh623 于 2020-9-2 14:25 编辑
文本“jiansi”是一行一个,比如:亨-了,曼-又等等。
文本“caifen”是汉字的拆分,有些汉字有两个以上的拆分。每一个有两个以上的组件,主字与拆分组件的分隔符是@或者!。
比如:艹!十十
󹠠@白白本
𩢟@馬力口
(文本“jiansi”的被减数在文本“caifen”的行首。)
我想得到的结果是文本“dengsi”,比如:
扩-扌=广
第二个批处理。仍然是这个,但是,需要两步,比如捆-木,捆@扌困,困@囗木,那么,捆-木=扌囗。
难点是,有些汉字有两种以上的拆分。
文本都是utf8 。
caifen:https://pan.baidu.com/s/1LqKu7L-AO0FvZo_sC9IgcA
提取码:wllg
谢谢!
作者: lxh623 时间: 2020-8-27 22:02
如果能够有三、四、五次拆分的方法,加30人民币。
作者: yhcfsr 时间: 2020-8-27 22:15
文件不全啊
作者: zaqmlp 时间: 2020-8-27 22:34
本帖最后由 zaqmlp 于 2020-8-27 22:44 编辑
- <# :
- cls
- @echo off
- cd /d "%~dp0"
- powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~f0'"
- pause
- exit
- #>
- $self=get-item -liter $args[0];
- $path=$self.Directory.FullName;
-
- $file1=".\jiansi.txt";
- $file2=".\caifen.txt";
- $file3=".\dengsi.txt";
-
- $file1=$file1 -replace '^\.',$path;
- $file2=$file2 -replace '^\.',$path;
- $file3=$file3 -replace '^\.',$path;
- if(-not (test-path -liter $file1)){Write-host ('"'+$file1+'" not found');exit;};
- if(-not (test-path -liter $file2)){Write-host ('"'+$file2+'" not found');exit;};
-
- $enc=New-Object System.Text.UTF8Encoding $False;
- $text1=[IO.File]::ReadAllLines($file1,$enc);
- $text2=[IO.File]::ReadAllLines($file2,$enc);
-
- $dic1=New-Object 'System.Collections.Generic.Dictionary[string,Object]';
- for($i=0;$i -lt $text2.count;$i++){
- $arr=$text2[$i].trim().split('@!',2);
- if($arr.length -ge 2){
- $brr=$arr[1].toCharArray();
- if(-not $dic1.ContainsKey($arr[0])){
- $dic1.add($arr[0],$brr);
- };
- };
- };
-
- [System.Collections.ArrayList]$tmp=@();
-
- function cf($v){
- if($dic1.ContainsKey($v)){
- for($j=0;$j -lt $dic1[$v].length;$j++){
- $c=($dic1[$v][$j]).toString();
- cf $c;
- };
- }else{
- [void]$tmp.add($v);
- };
- };
-
- $fs=New-Object System.IO.FileStream($file3, [System.IO.FileMode]::Create);
- $sw=New-Object System.IO.StreamWriter($fs, $enc);
- for($i=0;$i -lt $text1.count;$i++){
- write-host $text1[$i];
- $arr=$text1[$i].trim().split('-',2);
- if($dic1.ContainsKey($arr[0])){
- cf $arr[0];
- [System.Collections.ArrayList]$brr=@();
- for($k=0;$k -lt $tmp.count;$k++){
- if($tmp[$k] -ne $arr[1]){[void]$brr.add($tmp[$k]);};
- };
- $line=$text1[$i]+'='+($brr -join '');
- $sw.WriteLine($line);
- }else{
- $sw.WriteLine($text1[$i]);
- };
- $sw.Flush();
- $tmp.Clear();
- };
- $sw.Close();
- $fs.Close();
复制代码
作者: lxh623 时间: 2020-8-28 18:35
jiansi
链接:https://pan.baidu.com/s/1U-qwCxlDHL4YN_diU3jQfA
提取码:7436
作者: lxh623 时间: 2020-8-28 18:41
本帖最后由 lxh623 于 2020-8-28 19:17 编辑
回复 4# zaqmlp
有一点点问题。
我上传了jiansi 。好像没有算出减法,有些分得过细。
一次拆分,找到,就写入dengsi、并且删除原来的减式;找不到,进入二次拆分。
以下类推。
最后也找不到,就放弃,进入下一个。
这样的话,可能不至于太细。
谢谢!
作者: zaqmlp 时间: 2020-8-28 18:49
回复 6# lxh623 哪个没有算出减法
作者: lxh623 时间: 2020-8-28 19:10
回复 7# zaqmlp
比如,第一个
衰-𧘇=丶一𧘇󰑗
作者: lxh623 时间: 2020-8-29 19:48
本帖最后由 lxh623 于 2020-8-29 19:51 编辑
越来越觉得意义不大,但是,有可能做一个只是一次拆分的吗?就是被减数和减数在一行。
作者: zaqmlp 时间: 2020-8-29 20:22
回复 9# lxh623
有些字符识别不了,没办法正确拆分- <# :
- cls
- @echo off
- cd /d "%~dp0"
- powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~f0'"
- pause
- exit
- #>
- $self=get-item -liter $args[0];
- $path=$self.Directory.FullName;
-
- $file1=".\jiansi.txt";
- $file2=".\caifen.txt";
- $file3=".\dengsi.txt";
-
- $file1=$file1 -replace '^\.',$path;
- $file2=$file2 -replace '^\.',$path;
- $file3=$file3 -replace '^\.',$path;
- if(-not (test-path -liter $file1)){Write-host ('"'+$file1+'" not found');exit;};
- if(-not (test-path -liter $file2)){Write-host ('"'+$file2+'" not found');exit;};
-
- $enc=New-Object System.Text.UTF8Encoding $False;
- $text1=[IO.File]::ReadAllLines($file1,$enc);
- $text2=[IO.File]::ReadAllLines($file2,$enc);
-
- $dic1=New-Object 'System.Collections.Generic.Dictionary[string,Object]';
- for($i=0;$i -lt $text2.count;$i++){
- $arr=$text2[$i].split('@!:', 2);
- if($arr.length -ge 2){
- if(-not $dic1.ContainsKey($arr[0])){
- [System.Collections.ArrayList]$tmp=@();
- $dic1.add($arr[0], $tmp);
- };
- };
- [void]$dic1[$arr[0]].add($text2[$i]);
- };
-
-
- $fs=New-Object System.IO.FileStream($file3, [System.IO.FileMode]::Create);
- $sw=New-Object System.IO.StreamWriter($fs, $enc);
- for($i=0;$i -lt $text1.count;$i++){
- write-host $text1[$i];
- $arr=$text1[$i].split('-', 2);
- if($dic1.ContainsKey($arr[0])){
- $line=$text1[$i];
- for($j=0;$j -lt $dic1[$arr[0]].count;$j++){
- $brr=$dic1[$arr[0]][$j].split('@!:', 2);
- $t=$brr[1].replace($arr[1], '');
- if($brr[1] -ne $t){
- $line=$line+'='+$t;
- break;
- };
- };
- $sw.WriteLine($line);
- }else{
- $sw.WriteLine($text1[$i]);
- };
- $sw.Flush();
- };
- $sw.Close();
- $fs.Close();
复制代码
作者: lxh623 时间: 2020-8-30 16:20
本帖最后由 lxh623 于 2020-8-30 16:24 编辑
本来结了。又有新的想法。麻烦您一下。
第一、我用所有汉字按照第一个批处理,可以拆分,得到quanhanzi。
第二、做减法。jiansi文本中,到quanhanzi,得到减式的结果。一个想法,有没有必要,事先统计quanhanzi每一行同一东西的数量,比如:、2丿4,这样减法算起来更加清楚。
第三、还有个文本mubiao。比如,CB123456=足甹
CB123458=月世冊.
我想也把它每一行如第一那样拆分(+统计)。(或者到quanhanzi提取?)
希望结果result是CB123456=新的拆分。
第四,把文本result等号后面的内容与quanhanzi等号后面的内容,比较,一样的话,把CB123456=quanhanzi等号前面的内容(万一有多个,挨着写入),文本取名cengong。
比较,也许相减为零,也是办法。
这三个批处理,一个四十。
谢谢了!
作者: lxh623 时间: 2020-9-2 14:25
看来没有办法,还是了结吧。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |