Dll - split avec multiple delimiteur

Contenu du snippet

C'est une bibliothèque faisant un split avec multiple délimiteur. la fonction renvoie un variant, donc elle est utilisable en vba... J'espère que cette source sera utile à certain en soif de developpement sous excel par exemple...

Source / Exemple :


// Split.cpp : définit les fonctions exportées pour l'application DLL.
//

#include "stdafx.h"

#include <comdef.h> // Variant
#include <malloc.h>
#include <tchar.h>

#ifdef UNICODE
#define toclen wcslen	//toc pour type of char
#define toccpy wcscpy_s		//toc pour type of char
#else
#define toclen strlen		//toc pour type of char
#define toccpy strcpy_s		//toc pour type of char
#endif

#define LENGTH(x) (sizeof(x)/sizeof(x[0]))

extern "C" __declspec(dllexport) VARIANT __stdcall split(TCHAR* str,TCHAR* car)
{	
	int count=0;int mTcount = 0;
	TCHAR* mTchar[255];//=new TCHAR*;
	TCHAR* CreateBuf;
	TCHAR buffer[255];
	int iMot=0;int iPhrase=0;//
	bool truecar = false;
	int iCar;//incrémente les car à tester
	int strln =(int)toclen(str);
	while (iPhrase<strln)
	{	
		while (*(str + iPhrase)!='\0') 
		{	iCar = 0;
			while((*(car+iCar)!='\0')&&(truecar==false))
			{	if (*(str + iPhrase)==*(car+iCar))
					truecar=true;
					iCar++;
			}
			if(truecar==true)
			{	*(buffer + iMot)='\0';
				if(toclen(buffer)!=0) 
				{	
					CreateBuf = new TCHAR[toclen(buffer)*sizeof(TCHAR)];
					toccpy(CreateBuf,toclen(buffer)*sizeof(TCHAR),buffer);
					mTchar[mTcount] = CreateBuf;
					CreateBuf = 0;

					
					mTcount++;
				}
				iMot=0;
				truecar=false;
				iPhrase++;
			}
			else
			{	*(buffer + iMot)=*(str + iPhrase);
				iMot++;
				iPhrase++;
			}
		}
	}

  • (buffer + iMot)='\0';
CreateBuf = new TCHAR[toclen(buffer)*sizeof(TCHAR)]; toccpy(CreateBuf,toclen(buffer)*sizeof(TCHAR),buffer); mTchar[mTcount] = CreateBuf; CreateBuf = 0; mTcount++; VARIANT TheTableau; SAFEARRAYBOUND rgsabound[1]; long lCount[1]; _variant_t vntparam; try { VariantClear(&TheTableau); rgsabound[0].lLbound = 0; //iPhrase du premier élément rgsabound[0].cElements = mTcount; //iPhrase du dernier élément TheTableau.vt = VT_ARRAY | VT_VARIANT; //on ajuste le type de variant que l'on veut TheTableau.parray = SafeArrayCreate(VT_VARIANT, LENGTH(rgsabound), rgsabound); //on assigne le "array" //on vérifie si tout s'est déroullé correctement... if(TheTableau.parray == NULL){throw false;} while (count<mTcount) { lCount[0] = count; vntparam =mTchar[count];//m_split.str; //ça pourrait être des string, des enum etc. SafeArrayPutElement(TheTableau.parray,lCount,&vntparam); count++; } } catch(bool){exit(0);} count=0; while (count<mTcount) { delete mTchar[count]; count++; } return TheTableau; }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.