2012-04-14 75 views
1

早上好,的NSString解析

我從連接到iPad串行設備取回的字節流。一旦連接,提供的SDK將調用已轉發字節的委託方法。

經由SDK由串行設備轉發的讀數可在以下格式:

!X1:000.0; 

一旦連接到串行設備的授權方法會立即開始接收數據的 - 這可能是在不同的完成狀態即

:000.00; 

我需要做的是建立一個具體的方式來拆分串行設備返回的讀數,以便我可以操縱數據。

一些嘗試的選項有:

只需串聯所接收的字符串一段固定的時間,然後在分割的NSString的「;」字符。這雖然有點效率低下,不容許我來操作數據動態

-(void)receivingDelegateMethod:(NSString *)aString { 
     if(counter < 60){ 
      [self.PropertyString stringByAppendingString:aString]; 
     }else{ 
      NSArray *readings = [self.PropertyString componentsSeparatedByString: @";"]; 
     }  
} 

通過尋找「!」確定起點字符,然後將結果的子字符串附加到NSString屬性。先前對委託方法的所有調用都將追加到此屬性,然後刪除前10個字符。

我知道還有其他選項,例如NSScanners和RegEx,但我想在浪費更多不同方法的時間之前先獲得社區意見。

感謝

+1

首先,使用NSMutableString而不是重複的stringByAppendingString調用。至於你的算法,我會放棄字符,直到第一個「!」。 – 2012-04-14 13:11:04

+0

另一種選擇是繼續解析接收到的片段,然後識別丟失的片段並在解析中丟棄它。 – 2012-04-14 13:13:49

+0

(對於循環法輸入緩衝區,簡單地使用char數組可能會更好。) – 2012-04-14 13:15:50

回答

0

做一個BOOL標誌,指示流已經被初始化,並將其設置爲false。當你收到下一個數據塊時,首先檢查標誌。如果未設置,請跳過所有字符,直到看到感嘆號'!'。一旦看到它,放棄它前面的所有內容,並將剩餘的字符串複製到緩衝區中。如果設置了「初始化」標誌,則將整個字符串附加到緩衝區而不跳過字符。

一旦完成追加,掃描緩衝區爲!;分隔的部分。對於該模式的每次出現,請使用模式的完整部分調用指定的方法。您可以看中,並定義您自己的「二級」委託來處理預先驗證的字符串。

您可能需要檢測斷開連接,並將「初始化」標誌設置回NO

+0

查找'!',而不會丟棄完美的第一個元素。 – 2012-04-14 13:14:54

+0

@HotLicks好點!修正了,謝謝! – dasblinkenlight 2012-04-14 13:16:48

+0

輝煌。謝謝 – JordanMazurke 2012-04-22 17:05:45