2013-05-29 33 views
1

我編寫了以下從外部設備讀取緩衝區的函數(我用另一個函數打開了串口)。我有這樣的循環,因爲我想有不停的結果:將數據從外部設備保存到陣列

int get_data(int fd) 
{ 
    int n; 

for (;;) 
{ 
    char buff[1000]; 
    n=read(fd,buff,1000); 
    printf("%s\n\n", buff); 
    sleep(1); 
    memset(buff, 0, 1000); 
} 
} 

返回緩衝區每10秒不同的結果是這樣的:秒

machine 1:vol=3.24V, str=11.2 
machine 1:vol=3.27V, str=11.4 

machine 1:vol=3.44V, str=10.2 
machine 2:vol=3.23V, str=10.00 

10後。

我現在的問題是,我怎樣才能保存一個數組中的所有vol值和一個secon d數組的str值?下一步是將這些數據從數組中保存到mysql數據庫中。我想用strncpy來複制一個新數組中的字符串,但我認爲這不是一個好主意。例如:

char vol[10]; 
strncpy(vol, buff + 15, 4); 
printf("%s\n", vol); 

你有什麼建議我?

+0

您可以使用'strtok'分隔輸出。 http://en.cppreference.com/w/c/string/byte/strtok 空間可以是你的分隔符,不知道你想保存到陣列的哪些部分。 – Nobilis

+0

感謝您的回答...我想在第一個數組中保存數字3.44,3.27等,並在第二個10.2,10.00等 – dali1985

回答

1

可以這樣使用?這是非常粗略的,但那種能夠完成任務(或至少它說明了如何使用的strtok):

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char string [] = "machine 1:vol=13.271V, str=11.41"; 
    char buffer_a[25] = ""; 
    char buffer_b[25] = ""; 
    char* ptr; 

    ptr = strtok(string, " ,=Vvol:strmachine()"); 


    int i = 0; 
    while (ptr != NULL) 
    { 
     ptr = strtok(NULL, " ,=Vvol:strmachine()"); 

     if (i == 0) 
      strcat(buffer_a, ptr); // copies vol 

     if (i == 1) 
      strcat(buffer_b, ptr); // copies str 

     i++; 
    } 

    printf("%s\n", buffer_a); 

    printf("%s\n", buffer_b); 

    return 0; 
} 

輸出是:

$ ./a.out 
13.271 
11.41 
+0

非常有用的代碼...它按我的意思工作。但還有一個問題。如果我有char string [] =「machine 1:(vol = 13.271V,str = 11.41)」;我怎樣才能解釋()在strtok? – dali1985

+0

我剛剛測試了以下內容: 'strtok(string,「,= Vvol:strmachine()」);'它看起來可以工作,可以在'strtok'中聲明任何順序的字符:) 請嘗試並確認它是否適用於您。 – Nobilis

+0

我想要的是strmachine(),它在strtok中改變了它。再次非常感謝! – dali1985

0

下面的代碼解釋的基本思想。

#include "stdlib.h"   

float vol = 0, str = 0; 
char * ptr = buf; 

/* first vol */ 
ptr = strchr(ptr, '='); 
if (NULL == ptr) { 
    /* error handling */ 
} 
ptr++; 

vol = strtof(ptr, &ptr); 

/* next str */ 
ptr = strchr(ptr, '='); 
if (NULL == ptr) { 
    /* error handling */ 
} 
ptr++; 

str = strtof(ptr, &ptr); 

/* Now you can store vol & str to anywhere */