一个macOS上用的swift文件脚本的模版:输入文件文本转换后输出到文件

本文介绍一种简单的swift脚本实现方案和执行方法。脚本可以读取文件内容,需要读者自行实现内容转换,然后脚本将结果输出到指定输出文件。

脚本模版

其中getResult函数需要读者按照自己需要实现。

swift 复制代码
import Foundation

final class TestOnlySwift {

    //入参为输入文案,返回为输出文案,改这个函数实现就行了
    func getResult(str:String)->String {
        return str + "1"
    }
    
    //下面的可以不改
    
    func run(jsonFile: String, outputFile: String) {
        let pwd = shell("pwd")
        print("Working in \(pwd)")

        do {
            let jsonUrl = URL(fileURLWithPath: pwd).appendingPathComponent(jsonFile)
            
            guard FileManager.default.fileExists(atPath: jsonUrl.path) else {
                print("JSON file \(jsonUrl.path) does not exists!")
                exit(0)
            }
            
            let inputStr = try String(contentsOfFile: jsonUrl.path)
            let outputStr = getResult(str: inputStr)
            try outputStr.write(to: URL(fileURLWithPath: pwd).appendingPathComponent(outputFile), atomically: true, encoding: .utf8)
            print("Success")
        } catch {
            print("\(error)")
        }
    }

    @discardableResult
    func shell(_ command: String) -> String {
        let task = Process()
        let pipe = Pipe()
        
        task.standardOutput = pipe
        task.standardError = pipe
        task.arguments = ["-c", command]
        task.launchPath = "/bin/zsh"
        task.launch()
        
        let data = pipe.fileHandleForReading.readDataToEndOfFile()
        let output = String(data: data, encoding: .utf8)!
        
        return output.trimmingCharacters(in: .newlines)
    }

}

let namedArguments = UserDefaults.standard
guard let jsonFile = namedArguments.string(forKey: "i") else {
    print("Provide json crash file name with -i flag")
    exit(0)
}
guard let outputFile = namedArguments.string(forKey: "o") else {
    print("Provide output file name with -o flag")
    exit(0)
}
TestOnlySwift().run(jsonFile: jsonFile, outputFile: outputFile)

使用方式

把上面代码写到TestOnlySwift.swift文件中,跟输入文件放(inputFile)到一个目录,在终端如下执行命令,结果会放在outputFile。

复制代码
swift TestOnlySwift.swift -i inputFile -o outputFile
相关推荐
一个人旅程~2 天前
关于imac27inch因改短用户名导致混合硬盘和系统崩溃的问题分析与故障解决
经验分享·笔记·macos·新浪微博
volunteer10242 天前
从仅剩 6 GB 到狂腾 70 GB:我的 256G Mac mini 深度清理与内存排查实战
macos
todoitbo3 天前
我在 Mac 上用 Docker 部署 Nexent:从拉取镜像到接入模型
macos·docker·大模型·ai智能体·nexent·快速入门与环境准备
独隅3 天前
WebStorm macOS 安装部署与高效调优实战指南
ide·macos·webstorm
songgeb4 天前
YYImage Bug:一行之差,正常 JPEG 如何在 iOS 被读成条纹
ios·swift
fthux4 天前
Tick Rest,一个休息提醒工具的自我修养
macos·开源·swift
Fatbobman(东坡肘子)4 天前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
chaoahyl5 天前
WaterDiary 喝水记录 App 实战(2)· 实现喝水首页与本地保存
swift
FPGA小迷弟5 天前
FPGA 与千兆以太网:各类物理接口的形式、区别、使用方法与应用场景详解
tcp/ip·macos·fpga开发·udp·fpga
茶底世界之下6 天前
iPhone Duo 适配实战,Awaking 踩过的 8 个坑
ios·swiftui·swift