C> Séparation des chaînes séparées par des virgules> Implémentation de extractCsvRow ()

Environnement d'exploitation


Intégré C(MSP430)

J'ai essayé d'implémenter extractCsvRow () qui extrait chaque élément de la chaîne séparée par des virgules dans la situation de strcpy ().

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;
}

résultat

résultat


pval
3.141
2.718
6.022

Cela fonctionne, mais il faudra peut-être un peu plus de révision.

Vous pouvez le rendre encore plus facile si vous le faites avec Arduino, etc. http://qiita.com/7of9/items/ac7737c17c4dacf09bc3

Pour Unity http://qiita.com/7of9/items/f6ff497333bf558a5951

Recommended Posts

C> Séparation des chaînes séparées par des virgules> Implémentation de extractCsvRow ()
implémentation de c / c ++> RingBuffer (N marges)
Implémentation de la séquence de Fibonacci
Résumé des opérations sur les chaînes