首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Cocoa/Objective-C中的简单字符串解析:将命令行解析为命令和参数

在Cocoa/Objective-C中,可以使用NSTaskNSPipe来实现简单的字符串解析。以下是一个示例代码,用于将命令行解析为命令和参数:

代码语言:objective-c
复制
#import<Foundation/Foundation.h>

@interface CommandLineParser : NSObject

+ (void)parseCommandLine:(NSString *)commandLine;

@end

@implementation CommandLineParser

+ (void)parseCommandLine:(NSString *)commandLine {
    NSArray *arguments = [self.class splitArguments:commandLine];
    NSString *command = arguments[0];
    NSArray *params = [arguments subarrayWithRange:NSMakeRange(1, arguments.count - 1)];

    NSLog(@"Command: %@", command);
    NSLog(@"Parameters: %@", params);
}

+ (NSArray *)splitArguments:(NSString *)commandLine {
    NSMutableArray *arguments = [NSMutableArray new];
    NSMutableString *currentArgument = [NSMutableString new];
    BOOL inQuotes = NO;

    for (NSUInteger i = 0; i< commandLine.length; i++) {
        unichar c = [commandLine characterAtIndex:i];

        if (c == '\"') {
            inQuotes = !inQuotes;
        } else if (c == ' ' && !inQuotes) {
            if (currentArgument.length > 0) {
                [arguments addObject:currentArgument];
                [currentArgument setString:@""];
            }
        } else {
            [currentArgument appendFormat:@"%C", c];
        }
    }

    if (currentArgument.length > 0) {
        [arguments addObject:currentArgument];
    }

    return arguments;
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *commandLine = @"command \"param1 param2\" param3";
        [CommandLineParser parseCommandLine:commandLine];
    }
    return 0;
}

在这个示例中,我们定义了一个CommandLineParser类,其中包含了一个parseCommandLine:方法,该方法接受一个命令行字符串作为参数,并将其解析为命令和参数。我们还定义了一个splitArguments:方法,该方法将命令行字符串分割为参数数组。

splitArguments:方法中,我们使用了一个NSMutableString实例来存储当前参数,并使用一个BOOL变量来跟踪是否在引号内。我们遍历命令行字符串中的每个字符,如果遇到引号,则切换inQuotes变量的值。如果遇到空格且不在引号内,则将当前参数添加到参数数组中,并清空当前参数字符串。最后,如果当前参数字符串不为空,则将其添加到参数数组中。

main函数中,我们创建了一个CommandLineParser实例,并调用了parseCommandLine:方法来解析命令行字符串。在这个示例中,我们使用了一个简单的命令行字符串command \"param1 param2\" param3,其中包含了一个命令command和三个参数param1 param2param3。注意,由于我们使用了引号来包含参数param1 param2,因此它将被视为一个单独的参数。

总之,这个示例代码可以用于简单的命令行字符串解析,可以将命令行字符串解析为命令和参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python与R命令行参数解析方法

在写pipeline时候,经常把pythonR程序都整合进bash脚本里,这样比较方便,pythonR怎么解析命令行参数呢?...python命令行解析方法 python最常用命令行参数主要有两个:sys.argvargparse.ArgumentParser. 1.1....如果这里只提供了一个参数的话,则会因为没有argv[2]而报错: ? image 1.2 argparse argparse是现在解析命令行参数一个模块,比原来optparse更加方便。...image 通过add_argument来添加参数,required可选必须参数非必须参数。这里添加了一个必须参数name一个非必须参数name2。...image.png 2.R命令行参数解析方法 R命令行参数解析主要用commandArgs()。如下图所示: ? image 运行Rscript greet.R gouzi 得到: ?

1.3K30

argparse------用于命令行选项、参数命令解析

some integers.')ArgumentParser对象保存命令行解析Python数据类型所需所有信息。...注意,对于可选参数,还有另外一种情况——出现了选项字符串,但后面没有命令行参数。在本例生成来自const值。...,则解析解析该值,就像解析命令行参数一样。...然而,命令行字符串通常应该被解释另一种类型,比如float或int. add_argument()type关键字参数允许执行任何必要类型检查类型转换。...允许使用+/这样替代选项前缀。处理零个或多个样式参数一个或多个样式参数。生成更多信息使用消息。自定义类型操作提供更简单接口。

6.8K20

Swift进阶一:Swift简介

Swift语言引入了协议、协议扩展、泛型等新特性,因此使用Swift语言可以很好地面向协议编程;Swift语言函数闭包提升为语言一等公民,函数可以作为一个变量、可以作为其他函数参数、作为其他函数返回值等来传递...4,枚举类型增强 在Swift,枚举可以使用整型、浮点型、字符串等来表示其枚举成员原始值,还能拥有属性方法,甚至支持泛型、协议、扩展等等。...7,函数闭包 在Swift,函数是一等公民,可以直接定义函数类型变量,可以函数作为其他函数参数来传递,也可以函数作为其他函数返回值。这些特性可以让我们在Swift中进行函数式编程。...swiftc:强大命令行工具 首先来简单看一下一个整个编译过程是怎么样: ? C、Objective-C、Swift等语言,它们使用编译器后端都是LLVM。那么什么是LLVM呢?...大家只需要知道有这么一个swifts命令行工具,可以Swift源码转成各种形式文件,利用它来进行编译原理探究,甚至是进行中间语言优化。

2.8K20

iOSCocoa框架·Runtime及isa指针知识·填坑

是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发你可以使用各种语言;也不是开发工具,你可以在命令行上就可以创建Cocoa程序。...1.1、Cocoa框架 iOSCocoa众多框架中最重要最基本两个框架是:Foundation UIKit。...2、Cocoa对象 2.1 Objective-C是面向对象语言 Objective-CJava C++一样,有封装,继承,多态,重用。...new是一个简单内存分配初始化结合起来方法。 copycopyWithZone。 对象保持清理: retain方法增加对象保持次数。 release方法减少对象保持次数。...description方法允许对象返回一个内容描述字符串;这个方法输出经常用于调试(“print object”命令),以及在格式化字符串中和“%@”指示符一起表示对象。

96220

iOS开发入门笔记

/var/private/tmp),在FinderXcodeFile > Open对话框,点击鼠标是找不到,这时候就要通过命令行终端来打开了。...GoogleCode上有人整理了JavaObjective-C概念、数据类型对应表,参见这里 字符串 Objective-C里有字符串是由双引号包裹,并在引号前加一个@符号,例如: title =...Objective-C与Java、C一样,双引号表示字符串。 函数调用 前文述及,不涉及面向对象时,它C是完全一样。...“@”符号在Objective-C是个很神奇符号。 冒号也是方法名一部分,methodmethod:是两个不同方法名,不是overload,第二个带参数。...好消息是,Xcode是有命令行,我们可以写一个shell脚本,先用se自动修改源码,再调用Xcode命令行来编译以得到your——app.app目录,最后调用zip、mv等命令把上一个章节讲ipa

3.9K60

【iOS 开发】Objective-C 入门 Xcode 环境详解

点击 Check out an existing project 可以导入一个已经创建工程; 创建一个命令行程序 : 选择 创建工程界面的 OS X --> Command Line Tool 程序..., 即创建了一个命令行程序, Cocoa Application 是创建有界面的程序; -- ios 项目 : ios项目是手机和平板开发应用; -- OS X 项目 : OS X 是 OS 操作系统创建应用...Foundation 输出函数, 可输出字符串, 对象等 */ NSLog(@"Hello World"); /* @"Hello World", 加上 @ 是为了与 C 字符串区分 */...QuickTime 都被封装成了框架, Cocoa 包括了 Foundation Application Kit 等组件; (2) 自动释放池 内存管理 : 在早期 Object-C 需要手动管理内存分配回收...; -- NS 前缀说明 : Cocoa 框架中所有的 类 函数 常量 都会加上 NS 前缀; -- @"string" 说明 : @符号 用于区分 Object-C 与 C语言字符串, 加上 @ 符号

1.5K20

跨平台、跨语言应用开发,Elements 介绍

许可证覆盖您团队所有开发人员,也就是全公司获得授权。...特色: 先进编辑功能 单元测试集成 跨平台调试部署 ? 2,Water 用于在 Windows 开发应用,笔者就不再深入介绍了~~~ ?...4,Command Line 无论是在 Mac、Windows 还是 Linux上 ,都可以使用 IDE编辑器  EBuild 命令行构建项目,只需从终端使用独立 EBuild 命令、自动生成脚本。...EBuild 是底层构架,Fire、Water、Vs 是 IDE 工具,你可以使用命令行或者记事本写应用(你够NB的话~),当然,你也可以在第三方 IDE ,把 Ebuild 集成进去。...remotely Island Darwin local local, CrossBox 2 Build locally, debug locally or remotely FXGen GUI 前端命令行工具

5.1K20

Objective-C Runtime编程指南(1)

您只需编写编译Objective-C源代码即可使用它。 编译包含Objective-C方法代码时,编译器创建实现该语言动态特性数据结构函数调用。...例如,NSObject类定义了一个 description 实例方法,它返回一个描述类内容字符串。这主要用于调试GDB print-object命令打印从此方法返回字符串。...然后调用procedure,receiver(指向其数据指针)以及该方法指定所有参数传递给procedure。 最后,它传递procedure返回值作为它自己返回值。...Objective-C方法只是一个C函数,它至少需要两个参数self_cmd。 您可以使用函数class_addMethod函数添加到类。...在“Objective-C“远程消息传递”讨论代理就是这样代理。代理负责消息转发到远程接收方管理细节,确保参数值在连接中被复制检索,等等。但是它并没有试图去做其他事情。

75520

Sketch 插件开发官方文档合集插件基础您第一个插件开发环境调试ActionAPI发布插件插件捆绑插件,脚本命令插件位置更多关于CocoaScriptSketchTool参考资源

在本演练,您将向Sketch添加一个新命令,该命令显示一个简单“Hello World”消息。在稍后演练,您将与Sketch画布交互并查询用户当前选定图层。...它可以包含两种类型项目: 一个给出命令标识符字符串 描述子菜单字典(包含“标题”“项目”) isRoot 默认情况下,此字典列出菜单项显示在菜单,其名称由标题键指定。...您必须每个命令指定脚本密钥。 如果每个命令放入其自己脚本文件,则可以省略处理程序密钥。在这种情况下,Sketch默认调用onRun处理程序。...生成插件具有单个命令单个脚本文件。执行该命令调用onRun脚本函数,该函数包含您输入代码。 从这个起点开始,您可以通过直接编辑文件夹文件来扩展您插件。...访问CocoaSketch API 您可以从CocoaScript访问所有CocoaSketch API。 Objective-C属性行为与在桥JavaScript端应该一样。

6.3K90

iOS学习——iOS 整体框架及类继承框架图

显然,在上面所有的框架,最重要也最经常使用就是UIKitFoundation框架,在本文第二部分我们详细介绍这两部分类继承体系。 1.2 官方文档 官方文档戳这里!!...因此,这两天得闲就对这一块进行整理学习,对Cocoa框架最重要Foundation UIKit框架类继承体系进行了梳理。...UIKit框架各个类简单介绍戳后面的链接:UIKit框架各个类简要说明  三 Cocoa对象   此处内容全部来源于: IOS 整体框架类图值得收藏 3.1 Objective-C是面向对象语言...new是一个简单内存分配初始化结合起来方法。 复制:copycopyWithZone 对象保持清理: retain方法增加对象保持次数。 release方法减少对象保持次数。...description方法允许对象返回一个内容描述字符串;这个方法输出经常用于调试(“print object”命令),以及在格式化字符串中和“%@”指示符一起表示对象。

3.3K70

iOS系统架构及常用框架

SimpleCarrier:简单运营商信息获取 UI组件库 YYKit:是一组庞大、功能丰富 iOS 组件,包含Model解析、图片加载、缓存等基础服务,都是基于Category设计,使用方便且性能高于一些老框架...简单通俗近似理解:是一套基于CoreGraphicsOC语言封装。 主要部分有CoreAnimation、CALayer等 CoreAnimation 是QuartzCore重要部分。...图文混排:简单来说,就是在富文本插入一个空白占位符,通过相关代理计算图片尺寸信息,更具富文本计算出来frame设置对应图片位置,绘制图片。...通常我们会将他们分为几类: 值对象 集合 操作系统服务:文件系统、URL、进程通讯 通知 归档序列化 表达式条件判断 Objective-C语言服务 NSObject Objective-C NSObject...在Objective-C,类也是用对象来表示,而类isa指针指向它metaclass(存储静态成员变量类方法)。 super_class指针:指向父类。 name:类名称。

7.3K21

插件,脚本命令目录

Sketch插件定义了一个或多个命令,其中Sketch显示菜单项。 这些命令每一个实际上都是作为一个JavaScript函数实现(我们称之为处理程序),位于该包脚本文件。...这是一个桥梁,可让您编写可调用本机Objective-C / CocoaJavaScript脚本。...基础如下: 你会像往常一样编写JavaScript代码 使用桥接器,您可以从主机应用程序(在本例Sketch)或从系统本身获取Objective-C对象 基本Objective-C对象具有等同JavaScript...(如字符串和数字),通常可以以与JS版本相同方式使用 您可以像在JS中一样读取写入自定义Objective-C对象属性 您可以使用熟悉JavaScript语法或Objective-C方括号语法来调用自定义...生成插件具有单个命令单个脚本文件。执行该命令调用onRun脚本函数,该函数包含您输入代码。 从这个起点开始,您可以通过直接编辑文件夹文件来扩展您插件。

91180

唐巧iOS技术博客选摘

本文从swift语言入手分析,元组,函数,闭包等设计对它进行解释,并阐释swift语言设计大局观,最后分享一个Reactive Cocoa作者Talk编程思想。...本文详细整理了 Cocoa Runtime 系统知识,它使得 Objective-C 如虎添翼,具备了灵活动态特性,使这门古老语言焕发生机。...《刨根问底Objective-C Runtime(1)- Self & Super》:本文通过分析clang重写Objective-C源码,从而解释Objective-Cselfsuper在编译器层面分别是如何处理...《Swift开源项目精选》:该作者 2014 年 Swift 开源项目做了一个筛选汇总。...《如何自己动手实现 KVO》:KVO 是 Objective-C 对观察者模式(Observer Pattern)实现。也是 Cocoa Binding 基础。

3.2K60

4.9 C++ Boost 命令行解析

9.1 在字符串解析该段代码通过简单字符串切割实现了对命令行参数解析。它将命令行字符串切割选项参数,并输出它们内容。同时,根据特定选项参数组合条件,输出用户登录相关信息。...在 GetOpt 函数,使用 strtok 函数对 command 字符串进行切割和解析选项参数存储在 command_ptr 数组,并返回选项参数总数。...在 main() 函数,构造一个命令行字符串 cmd,然后调用 GetOpt 函数,解析选项参数存储在 Opts 数组,并获取选项参数总数 count。...读者需要注意,此代码使用简单字符串切割来实现命令行参数解析,并假设输入命令行格式是固定,即选项参数顺序格式是固定(如 "--address 127.0.0.1 --password 123456...根据上述所示库函数,我们可以灵活实现参数解析功能,并实现一个简单交互式参数解析功能,如下所示提供三个交互命令,读者可自行编译并运行测试。

37930

4.9 C++ Boost 命令行解析

9.1 在字符串解析 该段代码通过简单字符串切割实现了对命令行参数解析。它将命令行字符串切割选项参数,并输出它们内容。同时,根据特定选项参数组合条件,输出用户登录相关信息。...在 GetOpt 函数,使用 strtok 函数对 command 字符串进行切割和解析选项参数存储在 command_ptr 数组,并返回选项参数总数。...在 main() 函数,构造一个命令行字符串 cmd,然后调用 GetOpt 函数,解析选项参数存储在 Opts 数组,并获取选项参数总数 count。...读者需要注意,此代码使用简单字符串切割来实现命令行参数解析,并假设输入命令行格式是固定,即选项参数顺序格式是固定(如 "--address 127.0.0.1 --password 123456...根据上述所示库函数,我们可以灵活实现参数解析功能,并实现一个简单交互式参数解析功能,如下所示提供三个交互命令,读者可自行编译并运行测试。

25030
领券