如何从ios Objective-c中未格式化的字符串中获取值?

阿比纳巴

我想从字符串下方选择所有测量值,并需要存储到一个数组中。我从名字是“Kane”的机器上得到这种类型的字符串。当我当时使用蓝牙连接到这台机器时,我得到了这种类型的字符串。我可以将此字符串打印到控制台中。但我无法从这个字符串中检索值,我想存储到一个数组中。任何人都可以帮助我。谢谢

我想将 [serial no,Log No,DATE,TIME,CO2,CO,CO2,CO2,CO,CO/CO2,T1,T2,DELTA] 的值存储在一个数组中,例如:[12345,0002,23 /02/18,17:43:16, -0.00,0,0.00,-0.00,0,0.000,-N\F-,-N\F-,-N\F-]。这是我实际从机器获取并打印到 textview 的字符串:

KANE458 SW19392 V1.13

SERIAL No.    12345

LOG No.               0002

DATE          23/02/18  
TIME          17:43:16

------------------------
NEXT CAL      11/12/18
------------------------

COMMISSION TEST
------------------------

ANALYSER ZERO
-------------
CO2             %  -0.00

CO            ppm      0

FLUE INTEGRITY
--------------

CO2             %   0.00

MAX GAS FLOW
------------
CO2             %  -0.00
CO            ppm      0
CO/CO2            0.0000

MIN GAS FLOW
------------
CO2             %  -0.00

CO            ppm      0

CO/CO2            0.0000

FLOW & RETURN
-------------
T1               (null)C  -N\F-

T2             (null)C  -N\F-

DELTA          (null)C  -N\F-

我想要一个包含每一行最后一个空格字符之后的所有内容的数组

唐麦格

编辑答案:

好的 - 所以你想要每一行的“最后一句话”。

但是 ---- 我们假设您想忽略最后没有“值”的行。所以:

  • 将字符串拆分为“行”数组
  • 创建要忽略的行列表
  • 循环遍历行数组
  • 如果该行在忽略列表中,则忽略它
  • 否则,获取最后一个单词并将其添加到我们的“last words”数组中

所以...

NSString *searchedString = @"KANE458 SW19392 V1.13\n\nSERIAL No.    12345\n\nLOG No.               0002\n\nDATE          23/02/18  \nTIME          17:43:16\n\n------------------------\nNEXT CAL      11/12/18\n------------------------\n\nCOMMISSION TEST\n------------------------\n\nANALYSER ZERO\n-------------\nCO2             %  -0.00\n\nCO            ppm      0\n\nFLUE INTEGRITY\n--------------\n\nCO2             %   0.00\n\nMAX GAS FLOW\n------------\nCO2             %  -0.00\nCO            ppm      0\nCO/CO2            0.0000\n\nMIN GAS FLOW\n------------\nCO2             %  -0.00\n\nCO            ppm      0\n\nCO/CO2            0.0000\n\nFLOW & RETURN\n-------------\nT1               (null)C  -N\F-\n\nT2             (null)C  -N\F-\n\nDELTA          (null)C  -N\F-\n";

// lines to ignore, because they have no "values"
NSString *ignoreLines = @"COMMISSION TEST,ANALYSER ZERO,FLUE INTEGRITY,MAX GAS FLOW,MIN GAS FLOW,FLOW & RETURN";

// initialize an array for the last "word" from each line
NSMutableArray *arrayOfLastWords = [NSMutableArray array];

// split string into an array of "lines"
NSArray *arrayOfLines = [searchedString componentsSeparatedByString:@"\n"];

// for each "line"
for (NSString *s in arrayOfLines) {

    // see if this line is listed as one of the lines to ignore
    NSRange ignoreRange = [ignoreLines rangeOfString:s];

    // if not found, then we want to get the last "word"
    if (ignoreRange.location == NSNotFound) {

        // find last space character
        NSRange range = [s rangeOfString:@" " options:NSBackwardsSearch];

        // if the line has a space
        if (range.location != NSNotFound) {

            // gett the last "word" - everything after the last space
            NSString *result = [s substringFromIndex:range.location+1];

            // append it to our array of last words
            [arrayOfLastWords addObject:result];

        }
    }

}

NSLog(@"\n%@", arrayOfLastWords);

给出一个结果数组:

(
    "V1.13",
    12345,
    0002,
    "",
    "17:43:16",
    "11/12/18",
    "-0.00",
    0,
    "0.00",
    "-0.00",
    0,
    "0.0000",
    "-0.00",
    0,
    "0.0000",
    "-NF-",
    "-NF-",
    "-NF-"
)

如果您不想要第一行中的“V1.13”,只需跳过处理第一行。

如果您不知道字符串将使用 newLine 分隔符返回,或者如果您不知道将返回哪些字符串需要忽略,那么您需要编写一些额外的代码来将字符串拆分为各种分隔符,并提出构成“价值线”的标准。


原答案:

你可以用“蛮力”方法来做到这一点:

  • 将字符串拆分为“行”数组
  • 循环线
  • 检查每行中的第一个“单词”
  • 如果它匹配“CO2”或“T1”,则获取该行的其余部分(跳过空格)并将其添加到数组中

或者,您可以使用正则表达式。这是部分方法:

NSString *searchedString = @"KANE458 SW19392 V1.13\n\nSERIAL No.    12345\n\nLOG No.               0002\n\nDATE          23/02/18  \nTIME          17:43:16\n\n------------------------\nNEXT CAL      11/12/18\n------------------------\n\nCOMMISSION TEST\n------------------------\n\nANALYSER ZERO\n-------------\nCO2             %  -0.00\n\nCO            ppm      0\n\nFLUE INTEGRITY\n--------------\n\nCO2             %   0.00\n\nMAX GAS FLOW\n------------\nCO2             %  -0.00\nCO            ppm      0\nCO/CO2            0.0000\n\nMIN GAS FLOW\n------------\nCO2             %  -0.00\n\nCO            ppm      0\n\nCO/CO2            0.0000\n\nFLOW & RETURN\n-------------\nT1               (null)C  -N\F-\n\nT2             (null)C  -N\F-\n\nDELTA          (null)C  -N\F-\n";

NSError  *error = nil;  
NSRange   searchedRange = NSMakeRange(0, [searchedString length]);

// search for "CO2" at the start of a line, and capture everything to the end of the line
NSString *pattern = @"\\nCO2\\s*([^\\n\\r]*)";

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern: pattern options:0 error:&error];
NSArray* matches = [regex matchesInString:searchedString options:0 range: searchedRange];

// for each found match, skip spaces and save the rest of the line
for (NSTextCheckingResult* match in matches) {
    NSString* matchText = [searchedString substringWithRange:[match range]];
    NSRange group1 = [match rangeAtIndex:1];
    [arrayOfCO2 addObject:[searchedString substringWithRange:group1]];
}

// search for "T1" at the start of a line, and capture everything to the end of the line
pattern = @"\\nT1\\s*([^\\n\\r]*)";

regex = [NSRegularExpression regularExpressionWithPattern: pattern options:0 error:&error];
matches = [regex matchesInString:searchedString options:0 range: searchedRange];

// for each found match, skip spaces and save the rest of the line
for (NSTextCheckingResult* match in matches) {
    NSString* matchText = [searchedString substringWithRange:[match range]];
    NSRange group1 = [match rangeAtIndex:1];
    [arrayOfT1 addObject:[searchedString substringWithRange:group1]];
}

NSLog(@"");

NSLog(@"CO2:");

NSLog(@"%@", arrayOfCO2);

NSLog(@"");

NSLog(@"T1:");

NSLog(@"%@", arrayOfT1);

这是您发布的示例字符串的结果:

CO2:
(
    "%  -0.00",
    "%   0.00",
    "%  -0.00",
    "%  -0.00"
)

T1:
(
    "(null)C  -NF-"
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从格式化为JSON字符串的字符串中获取值?

来自分类Dev

如何从iOS中的格式化字符串中获取日期和时间

来自分类Dev

如何从格式化的字符串中获取子字符串

来自分类Dev

如何从“ for循环”返回字符串?Objective-C iOS

来自分类Dev

使用NSUserDefaults时格式字符串未使用Objective-C iOS 10数据参数

来自分类Dev

如何从 Java 中的 List 数组中获取格式化字符串?

来自分类Dev

如何格式化数组中的字符串?

来自分类Dev

如何从Python中的logging.formatter对象获取格式化程序字符串?

来自分类Dev

如何从未格式化的字符串中获取公共RSA密钥

来自分类Dev

如何在 Vue.js 中获取格式化字符串

来自分类Dev

如何从C ++中的格式化字符串派生int?

来自分类Dev

如何在 C# 字符串格式化程序中转义 Json 字符串中的花括号

来自分类Dev

如何在Objective-C中格式化日期?

来自分类Dev

管理 Python 字符串中的关键字参数:如何仅格式化某些参数并保持其他参数未格式化

来自分类Dev

如何获取从 Xcode 中的 NSPopUpButton 中选择的项目的标题字符串(Swift 或 Objective C)

来自分类Dev

如何在Objective-C中删除一些字符后的字符串?

来自分类Dev

如何在Realm中实现继承(iOS,Objective C)

来自分类Dev

如何在Objective-C iOS中解析JSON

来自分类Dev

如何使用Ruby以有效的方式从字符串中获取所需的格式化哈希?

来自分类Dev

通过Bash从SNMPWALK请求中获取多个字符串,但不确定如何格式化输出

来自分类Dev

是否可以在Objective-C中格式化字符串的特定部分?

来自分类Dev

如何在python中通过多种格式格式化日期字符串

来自分类Dev

如何在运行时在Objective-C中查找字符串常量?

来自分类Dev

在Objective-C中,如何比较日期对象和字符串?

来自分类Dev

如何从C#中的json反序列化/解析的字符串中获取值和键?

来自分类Dev

如何格式化TextView中显示的字符串中的文本

来自分类Dev

如何将sympy中的矩阵符号形式嵌入格式化的字符串中?

来自分类Dev

如何格式化TextView中显示的字符串中的文本

来自分类Dev

如何截断字符串[格式化]?C ++

Related 相关文章

  1. 1

    如何从格式化为JSON字符串的字符串中获取值?

  2. 2

    如何从iOS中的格式化字符串中获取日期和时间

  3. 3

    如何从格式化的字符串中获取子字符串

  4. 4

    如何从“ for循环”返回字符串?Objective-C iOS

  5. 5

    使用NSUserDefaults时格式字符串未使用Objective-C iOS 10数据参数

  6. 6

    如何从 Java 中的 List 数组中获取格式化字符串?

  7. 7

    如何格式化数组中的字符串?

  8. 8

    如何从Python中的logging.formatter对象获取格式化程序字符串?

  9. 9

    如何从未格式化的字符串中获取公共RSA密钥

  10. 10

    如何在 Vue.js 中获取格式化字符串

  11. 11

    如何从C ++中的格式化字符串派生int?

  12. 12

    如何在 C# 字符串格式化程序中转义 Json 字符串中的花括号

  13. 13

    如何在Objective-C中格式化日期?

  14. 14

    管理 Python 字符串中的关键字参数:如何仅格式化某些参数并保持其他参数未格式化

  15. 15

    如何获取从 Xcode 中的 NSPopUpButton 中选择的项目的标题字符串(Swift 或 Objective C)

  16. 16

    如何在Objective-C中删除一些字符后的字符串?

  17. 17

    如何在Realm中实现继承(iOS,Objective C)

  18. 18

    如何在Objective-C iOS中解析JSON

  19. 19

    如何使用Ruby以有效的方式从字符串中获取所需的格式化哈希?

  20. 20

    通过Bash从SNMPWALK请求中获取多个字符串,但不确定如何格式化输出

  21. 21

    是否可以在Objective-C中格式化字符串的特定部分?

  22. 22

    如何在python中通过多种格式格式化日期字符串

  23. 23

    如何在运行时在Objective-C中查找字符串常量?

  24. 24

    在Objective-C中,如何比较日期对象和字符串?

  25. 25

    如何从C#中的json反序列化/解析的字符串中获取值和键?

  26. 26

    如何格式化TextView中显示的字符串中的文本

  27. 27

    如何将sympy中的矩阵符号形式嵌入格式化的字符串中?

  28. 28

    如何格式化TextView中显示的字符串中的文本

  29. 29

    如何截断字符串[格式化]?C ++

热门标签

归档