[GO] C> Trennung von durch Kommas getrennten Zeichenfolgen> Implementierung von extractCsvRow ()

Betriebsumgebung


Eingebaute C.(MSP430)

Ich habe versucht, extractCsvRow () zu implementieren, das in der Situation von strcpy () jedes Element aus der durch Kommas getrennten Zeichenfolge extrahiert.

code v0.1

http://ideone.com/AmrfcF

sample.c


#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

/*
v0.1 2016/05/25
  - add extractCsvRow()
*/

static const char *s_rcvd = "pval,3.141,2.718,6.022"; // dummy data

static bool extractCsvRow(char *srcPtr, int length, int itmidx, char *dstPtr)
{
	char szbuf[20];
	int pos = 0;
	int cntComma = 0;
	
	int idx;
	if (dstPtr == NULL) {
		return false;
	}
	
	for(idx=0; idx < length; idx++) {
		if (srcPtr[idx] == ',') {
			if (cntComma == itmidx) {
				szbuf[pos++] = 0x00;
				strcpy(dstPtr, szbuf);
				return true;
			}
			cntComma++;
		} else {
			if (cntComma == itmidx) {
				szbuf[pos++] = srcPtr[idx];
			}
		}
	}
	
	if (cntComma == itmidx) {
		szbuf[pos++] = 0x00;
		strcpy(dstPtr, szbuf);
		return true;
	}

	return false;
}	

int main(void) {
	bool res;
	static char szbuf[20];
	int idx;
	
	for(idx=0; idx < 4; idx++) {
		memset(szbuf, 0, sizeof(szbuf));
		res = extractCsvRow(s_rcvd, strlen(s_rcvd), idx, szbuf);
		if (res) {
			printf("%s\n", szbuf);
		}
	}

	return 0;
}

Ergebnis

Ergebnis


pval
3.141
2.718
6.022

Es funktioniert, aber es braucht möglicherweise etwas mehr Überprüfung.

Sie können es einfacher mit Arduino usw. tun. Http://qiita.com/7of9/items/ac7737c17c4dacf09bc3

Für die Einheit http://qiita.com/7of9/items/f6ff497333bf558a5951

Recommended Posts

C> Trennung von durch Kommas getrennten Zeichenfolgen> Implementierung von extractCsvRow ()
Implementierung von c / c ++> RingBuffer (N Ränder)
Implementierung der Fibonacci-Sequenz
Zusammenfassung der Zeichenfolgenoperationen