Example #1
0
bool CCSVOperator::LoadCSV(CString path)
{
	int wLen = WideCharToMultiByte(CP_ACP, 0, path, -1, NULL, 0, NULL, NULL);//得到Char的长度
	char *str = new char[wLen + 1];                                             //分配变量的地址大小 
	WideCharToMultiByte(CP_ACP, 0, path, -1, str, wLen, NULL, NULL);       //将CString转换成char*	
	LoadCSV(str);
	return true;
}
Example #2
0
// Get all possible ids from the IDE files
CIDE*	LoadIDE(const char *filename)
{
	CCSV *csv = LoadCSV(filename);

	if (!csv)
		return NULL;

	return new CIDE(csv);
}
Example #3
0
//////////////////////////////////////////////////////////////////////////
//CSV operator
CCSVOperator::CCSVOperator(const char* path)
{
    LoadCSV(path);
}
Example #4
0
int LoadFile(char *fname)
{
    kosFileInfo fileInfo;
    kosBDVK bdvk;
    int filePointer = 0, i, j;
    Dword res, filesize;
    char buffer[512 + 1];
    char *d, *s, *k;
    int step = 0, items;

    if (str_is_csv(fname))
        return LoadCSV(fname);


    //rtlDebugOutString(fname);

    strcpy(fileInfo.fileURL,fname);
    fileInfo.OffsetLow = 0;
    fileInfo.OffsetHigh = 0;

    fileInfo.rwMode = 5;
    fileInfo.bufferPtr = (Byte *)&bdvk;
    Dword rr = kos_FileSystemAccess(&fileInfo); // в CKosFile нет определения размера
    //sprintf(debuf, "getsize: %U\n", rr);
    //rtlDebugOutString(debuf);
    if (rr != 0)
    {
        return -1;
    }

    // clear the table
    reinit();

    //rtlDebugOutString("clear done");

    filesize = bdvk.size_low;

    fileInfo.rwMode = 0;
    fileInfo.dataCount = strlen(sFileSign);
    fileInfo.bufferPtr = (Byte*)buffer;
    kos_FileSystemAccess(&fileInfo);
    s = (char*)sFileSign;
    d = buffer;
    while (*s && *d && *s++==*d++);		// застрелите меня
    if (*s != '\0' || *d != '\0')
    {
        return -2;
    }
    fileInfo.OffsetLow += fileInfo.dataCount;
    items = 1;
    while (fileInfo.OffsetLow < filesize)
    {
        // так прочитали ли мы ширину всех стоблцов, и длину всех строк прочитали ли мы?
        fileInfo.dataCount = 512;
        memset((Byte*)buffer, 0, 512);
        kos_FileSystemAccess(&fileInfo);
        //sprintf(debuf, "%U", fileInfo.OffsetLow);
        //rtlDebugOutString(debuf);
        //sprintf(debuf, "buffer: %S", buffer);
        //rtlDebugOutString(debuf);
        // что я увижу на доске отладки
        // то мне поможет в жизненном пути
        // смогу тогда своей ошибки гадкой
        // причину непосредственно найти

        switch (step)
        {
        case 0:			// стоблцы
            d = buffer;
            while (*d && *d != ',' && *d != '\n') d++;
            //d--;
            if (!*d)
            {
                return -2;
            }
            *d = '\0';
            i = atoi(buffer);
            col_width[items++] = i;
            if (items == col_count)
            {
                step++;
                items = 1;	//	теперь высоты строк читать мы будем смело
                //  чтоб их восстановить и было как всегда
                //sprintf(debuf, "cols read done last buf %S file pos %U",buffer,fileInfo.OffsetLow);
                //rtlDebugOutString(debuf);
            }
            d+=2;
            break;

        case 1:			// строки, коих высота записана
            d = buffer;
            while (*d && *d != ',' && *d != '\n') d++;
            //d--;
            if (!*d)
            {
                //sprintf(debuf,"oh shit, error at %U",items);
                //rtlDebugOutString(debuf);
                return -2;
            }
            *d = '\0';
            i = atoi(buffer);
            row_height[items++] = i;
            /*if (items > 5)
            {
            	sprintf(debuf, "set row from %S hei %U %U",buffer,items-1,i);
            	rtlDebugOutString(debuf);
            }*/

            if (items == row_count)
            {
                step++;		// а далее лежат ячейки в файле
                // записаны они в кривом формате
                // ибо писал сей код я темной ночью
                // но не курил травы, клянусь я вам
                // иначе бы и этого не скодил

                // дебажить сей мне код премного впадлу
                // но помню правило - коль написал дебажь
                // немедленно - а то нах все забудешь.
                // вот выпью - а там сразу за отладку.
                //sprintf(debuf, "before read cells offset %U %X",fileInfo.OffsetLow,fileInfo.OffsetLow);
                //rtlDebugOutString(debuf);
            }
            d+=2;
            break;

        // о, бряки я забыл забить. о ужас.
        // позор мне, на костре меня сожгите
        // ведь тот, кто break не ставит после casa
        // подобен ламеру, что си не знает
        // смогу ли я такое пережить?

        case 2:			// ячейки, ибо их содержимое сохранено здесь от исчезновения
            d = buffer;
            while (*d && *d++ != ' ');	// оужжас. зачем только я писал этот бред....
            d--;
            if (!*d)
            {
                return -2;
            }
            *d = '\0';
            i = atoi(buffer);
            d++;
            s=d;
            while (*d && *d++ != ':');	// когда-то я удивлялся, как люди могут такую херню писать... дожил
            d--;
            if (!*d)
            {
                return -2;
            }
            *d = '\0';
            j = atoi(s);
            //rtlDebugOutString(s);
            d++;
            k = d;
            while (*d && *d++ != '\n');
            d--;
            *d = '\0';
            d+=2;
            //sprintf(debuf, "i:%U j:%U d:%S\n",i,j,k);
            //rtlDebugOutString(debuf);
            cells[i][j] = (char*)allocmem(strlen(k) + 1);
            //memset(cells[i][j], 0, strlen(k) + 1);
            strcpy(cells[i][j], k);
            //sprintf(debuf, "offset: %U", fileInfo.OffsetLow);
            //rtlDebugOutString(debuf);
        }
        fileInfo.OffsetLow += d - (char*)buffer - 1;
    }
    //rtlDebugOutString("loading finished");
    return 1;
}