none
搜尋抓取 RRS feed

  • 問題

  • 假設我有

    a100

    b100

    c100

    a200

    b200

    a300

    b300

    我要搜尋到a並抓取後面數字進行運算後取代原本數值  

    方程式(原數值+100) 此功能已可以做到

    a200

    b100

    c100

    a300

    b200

    a400

    b300

    搜尋取代原本程式

    但現在我需要將前面搜尋到的數字進行運算

    方程式(前一個數字(沒前一個就為0)+原本數字)取代

    將原始假設結果變

    a100

    b100

    c100

    a300   

    b200

    a600    (300(已取代)+原本300)

    b300

    想請教各位  我想達成 可能可用哪個指令 






    • 已編輯 andyya 2015年9月2日 上午 08:55
    2015年8月17日 上午 02:21

解答

  • 請問一下你的搜尋以及儲存的指令是

        #region 宣告一個 Class 暫存用
        [Serializable]
        public class myInfo
        {
            public String CodeType { set; get; }
            public Decimal CodeValue { set; get; }  // 宣告這個型態是,因為看來你需要有小數點
    
            public myInfo()
            {
                CodeType = String.Empty;
                CodeValue = 0.0m;
    
            }
        }
        #endregion
    
    
        List<myInfo> tmpList = new List<myInfo>();   // New 一個 List<T>
        /* 資料迴圈外 ↑ */
    
        /* 資料迴圈內 ↓ */
        tmpList.FindLastIndex(.......)  // 類似向後搜尋的方法, 幫你找到最後一筆符合的資料
    
        myInfo tmpClass = new myInfo();  // New 一個 Class (保險起見,每次用就覆蓋掉之前的,所以放迴圈內)
        tmpClass.CodeType = 當下這筆的類別
        tmpClass.CodeValue = 當下這筆的值
        tmpList.Add(tmpClass) // 將Class的資料,存到 List<T>內
    
    
    • 已編輯 天氣 2015年8月21日 上午 03:39
    • 已標示為解答 andyya 2015年8月21日 上午 04:27
    2015年8月21日 上午 03:35

所有回覆

  • digiValue +digiValue 
    2015年8月17日 上午 05:00
  • 不太懂最後的意思?

    a600是只有單獨這項會改變,其他數字都不會變?

    照規則a300不是應該要變成a400(200+200)嗎?

    不是的話改變的條件是甚麼?

    2015年8月17日 上午 10:08
  • 要跟一開始的假設

    a100      

    b100

    c100

    a200

    b200

    a300

    b300

    結果變

    a100

    b100

    c100

    a300     此行抓到上一個搜尋的a 後面數值是100    故此行為原本a後面數字200+100 變a300

    b200

    a600    此行抓前一個搜尋的a後面數自已變300+原本300 變a600

    b300


    • 已編輯 andyya 2015年8月19日 上午 01:59
    2015年8月18日 上午 01:58
  • 此部分已試過喔 但他只會加上原本該行搜尋到的數字
    2015年8月18日 上午 02:05
  • 你的意思是否去標籤(比如說a100,a200,和a300),那麼“a”是一個組,後面數字累加?

    請具體說明,謝謝!

    
    

    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download


    2015年8月18日 上午 02:31
  • 不好意思 可能是我沒講清楚

    我上面只是個假設..

    並不一定是如上的數字

    a後面可能是112.22

    下一個a後面可能是3333.22


    • 已編輯 andyya 2015年8月18日 上午 03:22
    2015年8月18日 上午 03:19
  • 像這樣的計算結果?


    dino

    2015年8月18日 上午 06:55
  • string source = @"
        a100.3
        b100
        c100
        a200
        b200
        a300
        b300
    ";
    
    bool isFirst = true;
    decimal current = 0M;
    string result = Regex.Replace(source, @"\ba(?<num>\d+(\.\d*)?)", (m) =>
    {
        if (isFirst)
        {
            isFirst = false;
            current = Convert.ToDecimal(m.Groups["num"].Value);
            return m.Value;
        }
        else {
            current += Convert.ToDecimal(m.Groups["num"].Value);
            return "a"+current;
        }
    }, RegexOptions.IgnoreCase);

    • 已提議為解答 Dino WangMVP 2015年8月18日 上午 07:01
    • 已取消提議為解答 andyya 2015年8月19日 上午 03:37
    2015年8月18日 上午 06:58
  • 我換個假設

    a100      

    b100

    c100

    a200

    b200

    a300

    b300

    我方程式 cosx-cosy     X為前一個搜尋到的數字(沒有則為0)        Y為原本搜尋到的數字

    若用上面假設

    第一個計算會是cos0-cos100

    第二個計算會是cos100-cos200

    第三個計算會是cos200-cos300

    結果

    acos0-cos100     

    b100

    c100

    acos100-cos200

    b200

    acos200-cos300

    b300

    這樣因該有比較清楚

    就是要抓到前一個搜尋到的數字做計算

      

    2015年8月19日 上午 02:32
  • 我換個假設

    a100      

    b100

    c100

    a200

    b200

    a300

    b300

    我方程式 cosx-cosy     X為前一個搜尋到的數字(沒有則為0)        Y為原本搜尋到的數字

    若用上面假設

    第一個計算會是cos0-cos100

    第二個計算會是cos100-cos200

    第三個計算會是cos200-cos300

    結果

    acos0-cos100     

    b100

    c100

    acos100-cos200

    b200

    acos200-cos300

    b300

    這樣因該有比較清楚

    就是要抓到前一個搜尋到的數字做計算

      


    Hello andyya:

    我的話會這樣做

    一、先建立一個List<T> 只需要兩個屬性

      屬性一 = type → a
      屬性二 = 值   → 100

    二、整個流程如下

          先對List<T>搜尋 →  處理你的需求後 → 儲存所在的那一筆的資料到 Lsit<T>


    三、補充說明

       當走到下一筆時,立刻搜尋 List<T>

     使用向後搜尋!找到的第一個同type的資料 這就代表你要的,上一個同類別的值

    假設當剛走到第六筆時,你的 List<T>內容應該會長這樣

    Type, 值

    1.  a, 100      
    2.  b, 100
    3.  c, 100
    4.  a, 200  ***** 找到我了!!
    5.  b, 200
    向後搜尋的第一筆 a 就會是 200,也就是你要的上一筆

    6. a300
      |
      |
      |__找不到 → 代表就是 0
      |
      |__找到 → 就可以計算了!

    我這個方法應該簡單易懂吧^^ 希望有幫到你

    • 已編輯 天氣 2015年8月21日 上午 02:44
    2015年8月21日 上午 02:19
  • 請問一下你的搜尋以及儲存的指令是

    2015年8月21日 上午 03:25
  • 請問一下你的搜尋以及儲存的指令是

        #region 宣告一個 Class 暫存用
        [Serializable]
        public class myInfo
        {
            public String CodeType { set; get; }
            public Decimal CodeValue { set; get; }  // 宣告這個型態是,因為看來你需要有小數點
    
            public myInfo()
            {
                CodeType = String.Empty;
                CodeValue = 0.0m;
    
            }
        }
        #endregion
    
    
        List<myInfo> tmpList = new List<myInfo>();   // New 一個 List<T>
        /* 資料迴圈外 ↑ */
    
        /* 資料迴圈內 ↓ */
        tmpList.FindLastIndex(.......)  // 類似向後搜尋的方法, 幫你找到最後一筆符合的資料
    
        myInfo tmpClass = new myInfo();  // New 一個 Class (保險起見,每次用就覆蓋掉之前的,所以放迴圈內)
        tmpClass.CodeType = 當下這筆的類別
        tmpClass.CodeValue = 當下這筆的值
        tmpList.Add(tmpClass) // 將Class的資料,存到 List<T>內
    
    
    • 已編輯 天氣 2015年8月21日 上午 03:39
    • 已標示為解答 andyya 2015年8月21日 上午 04:27
    2015年8月21日 上午 03:35