顯示具有 字串處理 標籤的文章。 顯示所有文章
顯示具有 字串處理 標籤的文章。 顯示所有文章

2022年10月17日 星期一

[C#]語法混合應用

一些C# 的基礎應用範例

 int iData = 123;
string str = $"Hello{iData}!!";

Action<string> greet = name =>
{
    string greeting = $"hello {name}!";
    Console.WriteLine(greeting);
};
greet("world");



其他執行續範例說明:
正常寫法如以下兩段:
private void setText(Object str) { using (StreamWriter sw = new StreamWriter(@"D:\test.txt",true,Encoding.UTF8)) { sw.WriteLine(str.ToString()); } } protected void Button1_Click(object sender, EventArgs e) { string str = "測試四"; ThreadPool.QueueUserWorkItem(new WaitCallback(setText),(Object) str); }

透握委派方式簡化程式碼:
protected void Button1_Click(object sender, EventArgs e) { string str = "測試三"; ThreadPool.QueueUserWorkItem(delegate { using (StreamWriter sw = new StreamWriter(@"D:\test.txt", true, Encoding.UTF8)); //路徑 , 不複寫檔案 , 編碼 { sw.WriteLine(str); } }); }

透過Lambda寫法:
protected void Button1_Click(object sender, EventArgs e) { string str = "測試五"; ThreadPool.QueueUserWorkItem(callback => { using (StreamWriter sw = new StreamWriter(@"D:\test.txt", true, Encoding.UTF8)) { sw.WriteLine(str.ToString()); } }); }




參考來源:
https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/operators/lambda-expressions
https://dotblogs.com.tw/ken74114/2010/12/08/19988

2022年6月12日 星期日

[C++]把兩個char合併成一個char

 

測試環境:mfc 2019 

使用方式

unsigned char buff[2] = { '9','E' };

unsigned char ucResult = '0';

ucResult = catChar2Hex(buff[0], buff[1]);

CString cst;

cst.Format(L"%x", int(ucResult));

MessageBox(cst);


       結果: 0x9E

參考:https://blog.csdn.net/yhxxhy978/article/details/94136796


    unsigned char catChar2Hex(unsigned char hByte, unsigned char lByte)
    {
        unsigned char ucTmp = 0x00;
        unsigned char high, low;
        if (hByte >= 'A' && hByte <= 'F')
            high = hByte - 'A' + 10;
        else if (hByte >= 'a' && hByte <= 'f')
            high = hByte - 'a' + 10;
        else if (hByte >= '0' && hByte <= '9')
            high = hByte - '0';
        else
            ucTmp = 0xff;

        if (lByte >= 'A' && lByte <= 'F')
            low = lByte - 'A' + 10;
        else if (lByte >= 'a' && lByte <= 'f')
            low = lByte - 'a' + 10;
        else if (lByte >= '0' && lByte <= '9')
            low = lByte - '0';
        else
            ucTmp = 0xff;

        ucTmp = (high << 4) | (low << 0);
        return ucTmp;
    }

2022年4月7日 星期四

[C++]CString字符串分割

 #include <iostream>

#include <cstring> #include <atlcomtime.h> using namespace std; //最後一個參數返回的是子字符串的數量 CString * SplitString(CString str, char split, int& iSubStrs); int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failur CString str = "sssdf sfds jieuri lj122 98098"; // CString str = "sfsfsf"; CString* pStr; int iSubStrs; pStr = SplitString(str, ' ', iSubStrs); //如果子字符串的數量爲1 if (iSubStrs == 1) { //Convert CString to char char* pCh = (LPSTR)(LPCTSTR)str; printf("%s\n", pCh); } else { //輸出所有子字符串 for (int i = 0; i < iSubStrs; i++) { //Convert CString to char char* pCh = (LPSTR)(LPCTSTR)pStr[i]; printf("%s\n", pCh); } delete []pStr; } system("pause"); return nRetCode; } CString * SplitString(CString str, char split, int& iSubStrs) { int iPos = 0; //分割符位置 int iNums = 0; //分割符的總數 CString strTemp = str; CString strRight; //先計算子字符串的數量 while (iPos != -1) { iPos = strTemp.Find(split); if (iPos == -1) { break; } strRight = strTemp.Mid(iPos + 1, str.GetLength()); strTemp = strRight; iNums++; } if (iNums == 0) //沒有找到分割符 { //子字符串數就是字符串本身 iSubStrs = 1; return NULL; } //子字符串數組 iSubStrs = iNums + 1; //子串的數量 = 分割符數量 + 1 CString* pStrSplit; pStrSplit = new CString[iSubStrs]; strTemp = str; CString strLeft; for (int i = 0; i < iNums; i++) { iPos = strTemp.Find(split); //左子串 strLeft = strTemp.Left(iPos); //右子串 strRight = strTemp.Mid(iPos + 1, strTemp.GetLength()); strTemp = strRight; pStrSplit[i] = strLeft; } pStrSplit[iNums] = strTemp; return pStrSplit; }

2022年3月24日 星期四

[C#]String 檔案路徑分割

 

傳入路徑,後面的參數(upLevel)為層級,透過層級來自動切割要哪一些資料

Ex: 

String  str = "C:\\123\\456\\789\\1.Txt";

str  = GetUpLevelDirectory(str,0);

// str = C:\\123\\456\\789

str = GetUpLevelDirectory(str,1);

//C:\\123\\456

str = GetUpLevelDirectory(str,2);

//C:\\123

-------------------------------------------------------------------------------------------------------------

Path.GetFileName()、Path.GetExtension()、Path.GetFileNameWithoutExtension()

這三個方法是同一群的,依序是取得檔案名稱、取得副檔名、取得不包含副檔名的檔案名稱

--------------------------------------------------------------------------------------------------------------

以下為 function

using System.Diagnostics;

private string GetUpLevelDirectory(string path, int upLevel)
{
    var directory = File.GetAttributes(path).HasFlag(FileAttributes.Directory)
        ? path
        : Path.GetDirectoryName(path);

    upLevel = upLevel < 0 ? 0 : upLevel;

    for (var i = 0; i < upLevel; i++)
    {
        directory = Path.GetDirectoryName(directory);
    }

    return directory;
}

2022年3月10日 星期四

[C++]UChar to char 字串轉換

 bool UCharToChar(UCHAR* ucStr, int ilen, char* cStr){


    char *pStr = new char [ilen+1];

    try{
        for(int i=0;i<ilen;i++)
            pStr[i] = ucStr[i];

        pStr[ilen] ='\0';

        strcpy(cStr,pStr);
    }
    catch(...)
    {
        if(pStr){
            delete pStr;
            pStr = NULL;
        }
        return false;
    }

    if(pStr){
        delete pStr;
        pStr = NULL;
    }
    return true;
}

2021年10月4日 星期一

[SQL]字串切割連接處理 與 名字馬賽克範例

DECLARE @tNameTable TABLE(name VARCHAR(10))

--insert data

INSERT INTO @tNameTable

VALUES('唐三')

INSERT INTO @tNameTable

VALUES('唐三藏')

INSERT INTO @tNameTable

VALUES('唐朝盛世')

SELECT * FROM @tNameTable

-- start to mark

SELECT CASE LEN(name)

WHEN 0 | 1

THEN ''

WHEN 2 THEN CONCAT(LEFT(name, 1),'O')

ELSE

CONCAT(LEFT(name,1),SUBSTRING('OOOOOOOOOO',1,LEN(name)-2),RIGHT(name,1))

END

FROM @tNameTable 


結果!!!
預設的資料是 唐三,唐三藏,唐朝盛世

經過馬賽克字串處理會變成 唐O,唐O藏,唐OO世





[SQL]顯示千分位與小數顯示

  CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) CONVERT style參數說明 1  (expression為 money 或 smallmoney型別): 0 : 預設,保留小數位後兩位,並四捨...