首页
学习
活动
专区
工具
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的时候,经常把python和R程序都整合进bash脚本里,这样比较方便,python和R怎么解析命令行参数的呢?...python的命令行解析方法 python最常用的命令行参数主要有两个:sys.argv和argparse.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.4K30

argparse------用于命令行选项、参数和子命令的解析器

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

7K20
  • Swift进阶一:Swift简介

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

    2.8K20

    iOS中Cocoa框架·Runtime及isa指针知识·填坑

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

    1K20

    iOS开发入门笔记

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

    4K60

    【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.9K20

    HTML内容爬取:使用Objective-C进行网页数据提取

    为什么选择Objective-CObjective-C是苹果公司为Mac OS X和iOS操作系统开发的编程语言,广泛用于开发iOS和Mac应用程序。它以其强大的内存管理和面向对象的特性而闻名。...使用Objective-C进行网页爬取,可以利用其丰富的库和框架,如Foundation和Cocoa,来简化开发过程。环境搭建在开始编写代码之前,我们需要搭建开发环境。...对于Objective-C,你可以选择Xcode作为你的集成开发环境(IDE)。Xcode提供了代码编辑、调试、界面设计等多种功能,是开发macOS和iOS应用的首选工具。...编写爬虫代码以下是一个简单的Objective-C爬虫示例,它演示了如何发送HTTP GET请求并打印出网页的HTML内容。...Objective-C没有内置的HTML解析器,但我们可以使用第三方库,如GDataXML或CocoaHTTPServer,来解析HTML。

    11810

    跨平台、跨语言应用开发,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”中的“远程消息传递”中讨论的代理就是这样的代理。代理负责将消息转发到远程接收方的管理细节,确保参数值在连接中被复制和检索,等等。但是它并没有试图去做其他的事情。

    82120

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

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

    6.4K90

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

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

    3.6K70

    iOS系统架构及常用框架

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

    7.8K21

    插件,脚本和命令目录

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

    94180

    2019最新iOS面试题及答案

    3). assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时; 4). retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount...是防止在写未完成的时候被另外一个线程读取,造成数据错误 2). non-atomic:在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值...结论:关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。...2).strcpy是一个字符串拷贝的函数,它的函数原型为strcpy(char dst, const char src),将src开始的一段字符串拷贝到dst开始的内存中去,结束的标志符号为 ‘\0',...3). memcpy是具备字符串拷贝功能的函数,这是一个内存拷贝函数,它的函数原型为memcpy(char dst, const char src, unsigned int len);将长度为len的一段内存

    2.3K20

    唐巧的iOS技术博客选摘

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

    3.3K60
    领券