123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- //
- // CharacterAutoTest.swift
- // KdanAuto
- //
- // Created by 朱东勇 on 2022/11/22.
- //
- import Foundation
- import Cocoa
- class StringAutoBackTest : StringAutoTest {
-
-
- override func needTest() -> Bool {
- return self.selectedKeys().count > 0
- }
-
-
- override class func shared() -> AutoTest? {
- return StringAutoBackTest()
- }
-
- // // Auto Test refrence Check File
- // override func autoTest(_ complention:@escaping (_ object:AutoTest, _ report:NSAttributedString?) -> ()) {
- // self.compareFinishedFiles.removeAllObjects();
- // self.convertFiles.removeAllObjects()
- //
- // clearCacheFiles()
- //
- // let needCheckString = self.selectedKeys().contains("字符")
- //
- // if !needCheckString {
- // _status = .Finished
- // complention(self, self.reportString)
- // return
- // }
- //
- // _status = .Process
- // reportString = NSMutableAttributedString.init(string: "\n【\(String(self.fileType())) - \(self.name())】字符比对开始!\n",
- // attributes:[.foregroundColor : NSColor.blue])
- // let files = DataModel.shared.originFilesFor(_fileType, type: _type)
- // self.testFiles = NSArray(array: files);
- //
- // let checkDirectory = self.checkFileDirectory()
- // let originDirectory = self.originFileDirectory()
- // let resultDirectory = self.resultFileDirectory()
- //
- // if (files.count > 0) {
- // try? FileManager.default.createDirectory(atPath: checkDirectory, withIntermediateDirectories: true);
- // try? FileManager.default.createDirectory(atPath: resultDirectory, withIntermediateDirectories: true);
- // }
- //
- // var tDegree = Double(0);
- // var tCount = Int(0)
- // var fileIndex = 0;
- //
- // var convertFileBlock = { (files:[String]) in }
- // convertFileBlock = { (files:[String]) in
- // if (fileIndex >= files.count) {
- // TestDegreeManager.shared().set(((tCount != 0) ? tDegree/Double(tCount) : 0.0),
- // fileType: self.fileType(),
- // type: self.type())
- //
- // self._status = .Finished
- // DispatchQueue.main.async {
- // autoreleasepool {
- // complention(self, self.reportString);
- // }
- // }
- // return
- // }
- //
- // let fileName = files[fileIndex]
- // let fName = NSString(string: fileName).deletingPathExtension
- // let originPath = NSString(string: originDirectory).appendingPathComponent(fName+".pdf")
- // let resultPath = NSString(string: resultDirectory).appendingPathComponent(fName+"."+self.extention())
- // let checkPath = NSString(string: checkDirectory).appendingPathComponent(fName+"."+self.extention())
- //
- //
- // self.reportString?.append(NSMutableAttributedString.init(string: "\n【\(String(self.fileType())) - \(self.name())】开始转换文件 \"\(fName)\"\n",
- // attributes:[.foregroundColor : NSColor.black]))
- // // ...
- // // 执行转换过程
- // let index = self.testFiles.index(of: fileName);
- // if (index != NSNotFound) {
- // self.convertProgress = Double(index) / Double(self.testFiles.count)
- // }
- // self.convertFiles.add(fileName);
- // self.testlog("开始转换:"+fileName, (self.compareProgress + self.convertProgress)/2.0)
- // self.process(originPath, resultPath: resultPath) { status in
- // if FileManager.default.fileExists(atPath: resultPath) && status == 1 {
- // if needCheckString && FileManager.default.fileExists(atPath: checkPath) {
- // DispatchQueue.global().async {
- // let checkString = self.readTextFile(checkPath as NSString)
- // let resultStr = self.readTextFile(resultPath as NSString)
- //
- // if (checkString != nil && resultStr != nil) {
- // let maxSize = checkString!.count
- // let report = NSMutableAttributedString(string: "")
- // let degree = self.compareString(checkString as! NSString, result: resultStr as! NSString) { appAttr in
- // report.append(appAttr)
- // }
- // // let degree = self.compareString(checkString as! NSString, result: resultStr as! NSString) { skipString, failString in
- // // self.appendErrorInfo(skipString, failString: failString)
- // // }
- //
- // var color = NSColor.black
- // if fabs(degree-100.0) >= 0.01 {
- // color = NSColor.red
- // }
- // tDegree += degree;
- // tCount += 1
- //
- // TestDegreeManager.shared().set(degree,
- // fileType: self.fileType(),
- // type: self.type(),
- // fileName: fileName)
- //
- // let successCount = Int(maxSize * Int(degree)/100)
- // report.append(NSAttributedString.init(string: "【\(String(self.fileType())) - \(self.name())】文件 \"\(fName)\"比对完成,准确率\(degree)%(\(successCount)/\(maxSize))\n",
- // attributes:[.foregroundColor : color]))
- // if (report != nil) {
- // do {
- // let rtfData = try? report.data(from: .init(location: 0, length: report.length),
- // documentAttributes: [.documentType: NSAttributedString.DocumentType.rtf])
- //
- // let path = NSString(string: resultPath).appendingPathExtension("rtf")
- // try? FileManager.default.removeItem(atPath: path!);
- // try? rtfData?.write(to: NSURL.fileURL(withPath: path!))
- // } catch {
- // }
- // self.reportString?.append(report)
- // }
- // }
- //
- // let index = self.testFiles.index(of: fileName);
- // if (index != NSNotFound) {
- // self.compareProgress = Double(index) / Double(self.testFiles.count)
- // }
- // self.compareFinishedFiles.add(fileName);
- // self.testlog("对比完成:"+fileName, (self.compareProgress + self.convertProgress)/2.0)
- //
- // fileIndex += 1
- // convertFileBlock(files);
- // }
- // }else {
- // self.reportString?.append(NSMutableAttributedString.init(string: "【\(String(self.fileType())) - \(self.name())】对照文件 \"\(fName)\"不存在!\n",
- // attributes:[.foregroundColor : NSColor.red]))
- //
- // let index = self.testFiles.index(of: fileName);
- // if (index != NSNotFound) {
- // self.compareProgress = Double(index) / Double(self.testFiles.count)
- // }
- // self.compareFinishedFiles.add(fileName);
- // self.testlog("对比完成:"+fileName, (self.compareProgress + self.convertProgress)/2.0)
- //
- // fileIndex += 1
- // convertFileBlock(files);
- // }
- // }else {
- // if (status == 0) {
- // self.reportString?.append(NSMutableAttributedString.init(string: "【\(String(self.fileType())) - \(self.name())】文件 \"\(fName)\"转档失败!\n",
- // attributes:[.foregroundColor : NSColor.red]))
- // }else if (status == -1 || status == -2) {
- // self.reportString?.append(NSMutableAttributedString.init(string: "【\(String(self.fileType())) - \(self.name())】文件 \"\(fName)\"文档无法打开!\n",
- // attributes:[.foregroundColor : NSColor.red]))
- // }else if (status == -3) {
- // self.reportString?.append(NSMutableAttributedString.init(string: "【\(String(self.fileType())) - \(self.name())】文件 \"\(fName)\"转档中 Crash!\n",
- // attributes:[.foregroundColor : NSColor.red]))
- // }
- //
- // let index = self.testFiles.index(of: fileName);
- // if (index != NSNotFound) {
- // self.compareProgress = Double(index) / Double(self.testFiles.count)
- // }
- // self.compareFinishedFiles.add(fileName);
- // self.testlog("对比完成:"+fileName, (self.compareProgress + self.convertProgress)/2.0)
- // fileIndex += 1
- // convertFileBlock(files);
- // }
- // }
- // }
- // convertFileBlock(files);
- // }
- //
- //
- /// Compare
- override func compareString(_ check:NSString, result:NSString, callback:@escaping (_ appAttr:NSAttributedString)->()) -> Double {
- // func compareString(_ check:NSString, result:NSString, failure:@escaping (_ skipString:NSString, _ failString:NSString)->()) -> Double {
- return autoreleasepool {
- var checkString = check
- var resultStr = result
- var maxSize = checkString.length
- var successCount = 0;
-
- resultStr = resultStr.replacingOccurrences(of: "\n", with: "") as NSString
- resultStr = resultStr.replacingOccurrences(of: " ", with: "") as NSString
-
- /**
- (A0 = B0)
- - A-1 & B-1
- (A0 != B0) & (A0 in B) & (B0 in A)
- - 取 A0,B0最小 Range 值
- - 字符串裁剪对齐
- (A0 != B0) & (A0 in B)
- - 存储B0到识别错误缓存
- (A0 != B0) & (B0 in A)
- - 存储 A0到识别遗漏字符串
- (A0 != B0)
- - 分别存储 A0、B0到遗漏及错误字串
- */
- var skipString = NSString()
- var failString = NSString()
- while (checkString.length > 0 && resultStr.length > 0) {
- let subc = checkString.substring(to: 1) as NSString
- let subr = resultStr.substring(to: 1) as NSString
-
- let cRange = checkString.range(of: subr as String)
- let rRange = resultStr.range(of: subc as String)
-
- if subc.isEqual(to: subr) { // (A0 = B0)
- // Check Success
- callback(attributeStringWith(skipString, failString: failString))
- // failure(skipString, failString)
- // self.appendErrorInfo(skipString, failString: failString)
- skipString = NSString()
- failString = NSString()
-
-
- checkString = checkString.substring(from:1) as NSString
- resultStr = resultStr.substring(from:1) as NSString
- successCount = successCount + 1
- callback(NSAttributedString(string: subc as String))
- }else if (["\n", "\r", " "].contains(subc)) {
- callback(NSAttributedString(string: subc as String))
- maxSize -= 1;
- checkString = checkString.substring(from:1) as NSString
- } else if (cRange.location != NSNotFound &&
- rRange.location != NSNotFound) {
- if (min(cRange.location, rRange.location) >= 2) {
- let nextc = checkString.substring(with: NSRange(location: 1, length: 1)) as NSString
- let nextr = resultStr.substring(with: NSRange(location: 1, length: 1)) as NSString
- let ncRange = checkString.range(of: nextr as String)
- let nrRange = resultStr.range(of: nextc as String)
-
- if (min(nrRange.location, ncRange.location) < min(cRange.location, rRange.location)) {
- if (ncRange.location < nrRange.location) {
- //‘subc' 字符串有在‘resultStr’中,但'subr'不在’checkString‘中,resultStr 往后推一
- skipString = skipString.appending(subc as String) as NSString
- checkString = checkString.substring(from:1) as NSString
- }else {
- //‘subc' 字符串有在‘resultStr’中,但'subr'不在’checkString‘中,resultStr 往后推一
- failString = failString.appending(subr as String) as NSString
- resultStr = resultStr.substring(from:1) as NSString
- }
- }else if (cRange.location < rRange.location) {
- //‘subc' 字符串有在‘resultStr’中,但'subr'不在’checkString‘中,resultStr 往后推一
- skipString = skipString.appending(subc as String) as NSString
- checkString = checkString.substring(from:1) as NSString
- }else {
- //‘subc' 字符串有在‘resultStr’中,但'subr'不在’checkString‘中,resultStr 往后推一
- failString = failString.appending(subr as String) as NSString
- resultStr = resultStr.substring(from:1) as NSString
- }
- }else {
- // var scale = (skipString.length > 0) ? (Float(checkString.length) / Float(skipString.length)) : Float(1.0)
- // if (checkString.length > skipString.length && cRange.location <= Int(Float(rRange.location)*scale)) {
- // //‘subc' 字符串有在‘resultStr’中,但'subr'不在’checkString‘中,resultStr 往后推一
- // skipString = skipString.appending(subc as String) as NSString
- // checkString = checkString.substring(from:1) as NSString
- // }else if (checkString.length <= skipString.length && cRange.location > Int(Float(rRange.location)*scale)) {
- // failString = failString.appending(subr as String) as NSString
- // resultStr = resultStr.substring(from:1) as NSString
- // }else
- if (cRange.location < rRange.location) {
- //‘subc' 字符串有在‘resultStr’中,但'subr'不在’checkString‘中,resultStr 往后推一
- skipString = skipString.appending(subc as String) as NSString
- checkString = checkString.substring(from:1) as NSString
- }else {
- //‘subc' 字符串有在‘resultStr’中,但'subr'不在’checkString‘中,resultStr 往后推一
- failString = failString.appending(subr as String) as NSString
- resultStr = resultStr.substring(from:1) as NSString
- }
- }
- }else if (cRange.location != NSNotFound) {
- //‘subc' 字符串有在‘resultStr’中,但'subr'不在’checkString‘中,resultStr 往后推一
- skipString = skipString.appending(subc as String) as NSString
- checkString = checkString.substring(from:1) as NSString
- }else if (rRange.location != NSNotFound) {
- //‘subc' 字符串有在‘resultStr’中,但'subr'不在’checkString‘中,resultStr 往后推一
- failString = failString.appending(subr as String) as NSString
- resultStr = resultStr.substring(from:1) as NSString
- }else {
- // 两个子字串均未找到
- skipString = skipString.appending(subc as String) as NSString
- failString = failString.appending(subr as String) as NSString
-
- checkString = checkString.substring(from:1) as NSString
- resultStr = resultStr.substring(from:1) as NSString
- }
- }
-
- skipString = skipString.appending(checkString as String) as NSString
- failString = failString.appending(resultStr as String) as NSString
- // failure(skipString, failString)
- callback(attributeStringWith(skipString, failString: failString))
- callback(NSAttributedString(string: "\n"))
-
- let degree = (maxSize>1) ? Double(Float(successCount)/Float(maxSize) * 100) : 0
-
- return degree
- }
- }
-
- }
|