iT邦幫忙

0

C#字串切割問題

c#
  • 分享至 

  • xImage

我有個複選紐,欄位名稱叫COMPLICATION

https://ithelp.ithome.com.tw/upload/images/20201015/20110132sjqkoY9qyA.jpg

我點選ABC的話COMPLICATION欄位則顯示 a,b,c
目前我需要把COMPLICATION做分割並放入對應欄位裡

sheet.Cells[rowIdx, 1].Value = ;
sheet.Cells[rowIdx, 2].Value = ;
sheet.Cells[rowIdx, 3].Value = ;
sheet.Cells[rowIdx, 4].Value = ;
sheet.Cells[rowIdx, 5].Value = ;
sheet.Cells[rowIdx, 6].Value = ;
sheet.Cells[rowIdx, 7].Value = ;
sheet.Cells[rowIdx, 8].Value = ;
sheet.Cells[rowIdx, 9].Value = ;
sheet.Cells[rowIdx, 10].Value = ;
sheet.Cells[rowIdx, 11].Value = ;

就假設說COMPLICATION的值是 a,b,c那結果就是

sheet.Cells[rowIdx, 1].Value = a;
sheet.Cells[rowIdx, 2].Value = b;
sheet.Cells[rowIdx, 3].Value = c;

只是目前我除了能做字串分割外後續暫時沒想到,請問這個問題該如何解呢?

更新
我後來是用把他寫進LIST裡面並跑foreach迴圈做判斷

 var splite = item.COMPLICATION.Split(',');
 var splitelist = new List<ReportViewModel>();

 foreach (var stringcode in splite)
 {
     splitelist.Add(new ReportViewModel() { text = stringcode });
 }
 
 foreach (var splitelisrcode in splitelist)
 {
  if (splitelisrcode.text == "a") ...
 }

大概是這樣

foreach (var splitelisrcode in splitelist)
{
if(!string.isnullorempty(splitelisrcode.text) && splite.contain(splitelisrcode.text)){
//打勾
}
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
賽門
iT邦超人 1 級 ‧ 2020-10-15 17:49:01

string[] Array = complication.split(",");
sheet.Cells[rowIdx, 1].Value = array[0];
sheet.Cells[rowIdx, 2].Value = array[1];
sheet.Cells[rowIdx, 3].Value = array[2];
我不知道你在C#的經驗有多久, C#的陣列元素都是由0開始的.
另外, 如果勾選的是a, b, d, Complication字串中沒有c, 這樣子你要如何處理呢?

tenno081 iT邦研究生 4 級 ‧ 2020-10-15 17:55:32 檢舉

我就是在想這個問題,所以才想請教一下這問題該如何解決

tenno081 iT邦研究生 4 級 ‧ 2020-10-15 17:57:53 檢舉

只是後來發現我問錯了,您的解法是我最初所想的
但會遇到長度問題,目前想到的解法可能會有很多判斷,所以才想請教一下

0
glj8989332
iT邦研究生 4 級 ‧ 2020-10-16 08:48:16

可以嘗試做的方法想到2種

  1. 把有勾和沒勾的都串起來, 假設全部選項是a,b,c,d,e 5種,你選了a和d,因此字串變成"a,,,d,", 因此字串切割逗號會變成["a", "", "", "d", ""]

  2. 選項背後的value多加從0開始的index, 假設全部選項是a,b,c,d,e 5種,而value改成
    0:a,1:b,2:c,3:d,4:e,你選了a和d, 得到字串0:a,3:d,先用逗號切割、再用分號切割,可得到a和d對應的0和3 index

tenno081 iT邦研究生 4 級 ‧ 2020-10-16 10:05:58 檢舉

感謝,只是我點幾個就只會有幾個的長度,後來我改成這樣處理,但還是謝謝

0
japhenchen
iT邦超人 1 級 ‧ 2020-10-16 10:23:00

前端多增加一個beforeSubmit來轉換所有的checkbox做成一個可被後端split的字串
下例我沒使用jQuery或其他框架,只用pure Javascript
這樣有勾沒勾都會被正確的切割成完整的數量了

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="myproject_test"%>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script>
        var beforeSubmit = function (e) {
            var AllTest = document.getElementsByName("cbTest[]");
            var newReq = [];
            for (i = 0; i < AllTest.length; i++) {
                newReq.push(AllTest[i].checked ? AllTest[i].value : "");
            }
            document.postdataform.cbTestArray.value = newReq.join(',')
            document.postdataform.submit();
        }
    </script>
</head>
<body>
    <form method="post" name="postdataform" action="test.aspx">
        <input type="checkbox" name="cbTest[]"  value="a" />a
        <input type="checkbox" name="cbTest[]"  value="b" />b
        <input type="checkbox" name="cbTest[]"  value="c" />c
        <input type="checkbox" name="cbTest[]"  value="d" />d
        <input type="checkbox" name="cbTest[]"  value="e" />e
        <input type="checkbox" name="cbTest[]"  value="f" />f
        <input type="hidden" name="cbTestArray" value="" />
        <input type="hidden" name="act" value="test" />
        <input type="button" value="送出" onclick="beforeSubmit();" />
    </form>
</body>
</html>

後端C#用Split把前端送來的checkbox串成的字串拆開處理

var splitedData = Request.Form["cbTestArray"].Split(new char[] { ',' });
for(int i=0; i < splitedData.Length; i++)
{
    Response.Write(string.Format("request[{0}] => {1}<br>",i, splitedData[i]));
}

(今天又鬧笑話了)

0
mick60316
iT邦新手 5 級 ‧ 2020-10-16 16:18:43

試試看利用ASCII code做為Index

var splite = item.COMPLICATION.Split(',');
 
 foreach (var splitelisrcode in splitelist)
 {
  char code =splitelisrcode.ToCharArray()[0];
  int sheetsCellsIndex =code -'a'+1;//因為你的Index從1開始算 如果從0的話+1可以省略
  sheet.Cells[rowIdx, sheetsCellsIndex].Value = code;
 }

我要發表回答

立即登入回答