Đếm số number trong đoạn text

Liên hệ QC

Phụ Hồ Lên Phú Hộ

Thành viên chính thức
Tham gia
20/2/21
Bài viết
75
Được thích
25
Chào mọi người.
Mình có yêu cầu là đếm số number trong đoạn text mà máy hôm nay mình tìm hiểu mà chưa có kết quả. Nay post lên nhờ mọi người hướng dẫn giúp mình.
Ví dụ: mình có 1 đoạn text là
A1,12,8,7+8,9,14+3
Mỗi số điều ngăn cách bằng dấu ,
Kết quả mình muốn là
Có 4 số 1,12,8,9
Có 2 số có dấu + thì đóng ngoặc ;(8);(3)

=4;(8);(3)

Xin cảm ơn
 
Chào mọi người.
Mình có yêu cầu là đếm số number trong đoạn text mà máy hôm nay mình tìm hiểu mà chưa có kết quả. Nay post lên nhờ mọi người hướng dẫn giúp mình.
Ví dụ: mình có 1 đoạn text là
A1,12,8,7+8,9,14+3
Mỗi số điều ngăn cách bằng dấu ,
Kết quả mình muốn là
Có 4 số 1,12,8,9
Có 2 số có dấu + thì đóng ngoặc ;(8);(3)

=4;(8);(3)

Xin cảm ơn
Bạn nên tạo một file một cột là dữ liệu nguồn, một cột là dữ liệu đích. Nhiều dữ liệu một tí thì mới xem xét được tất cả các trường hợp
Nói thêm, cái ví dụ bạn đưa ra mình cũng thấy khó hiểu rồi
A1,12,8,7+8,9,14+3 => 1,12,8,9. Vậy còn khúc này "Có 2 số có dấu + thì đóng ngoặc ;(8);(3)" thì đưa vào đâu
 
Upvote 0
Bạn nên tạo một file một cột là dữ liệu nguồn, một cột là dữ liệu đích. Nhiều dữ liệu một tí thì mới xem xét được tất cả các trường hợp
Nói thêm, cái ví dụ bạn đưa ra mình cũng thấy khó hiểu rồi
A1,12,8,7+8,9,14+3 => 1,12,8,9. Vậy còn khúc này "Có 2 số có dấu + thì đóng ngoặc ;(8);(3)" thì đưa vào đâu
Cái này chỉ là đoạn test ah bạn.
Kết quả mình muốn là 1,12,8,9 là có 4 số còn ;(8);(3) thì ghép lại sau số 4
=4;(8);(3)
Bài đã được tự động gộp:

Vậy số 7, số 14 làm sao? Mình xem kỹ lại đê.

View attachment 261273
Số 7 số 14 đứng trước dấu + thì mình bỏ không quan tâm nó
 
Upvote 0
Cái này chỉ là đoạn test ah bạn.
Đọc câu này mới lộn tiết.
"chỉ là" tức là đăng lên chơi vậy hả?
Tét giời biển gì thì phải có tác dụng rằng: Dựa vào cái tét đó, người ta làm ra đáp án để áp dụng được với cái thật đang bí mật bí đường kia.
Chịu thua!

Số 7 số 14 đứng trước dấu + thì mình bỏ không quan tâm nó
Thì mình nói rõ ràng, mạch lạc ra. Sao cứ xón xón, ai hỏi gì nói nấy vậy?

---
Dùng split cắt theo dấu phẩy.
Đếm các phần tử không có dấu cộng -> xong phần 1.
Các phần tử có dấu cộng thì lấy thằng phía sau và nhét nó vào mở đóng ngoặc --> xong phần 2.
Cuối dùng ghép 2 phần kia lại là xong.
 
Upvote 0
Túm lại là không đưa thêm dữ liệu, chỉ có một và chỉ một mà thôi.
Trời mình nói là chỉ có 1 đoạn text mà dữ liệu gì nữa.
A2,3,5,1+15,9, 10,7+4 kết quả =5;(15);(4).
Nó theo quy luật thì chỉ cần 1 ví dụ cũng được chứ có sao đâu nhỉ ???
Bài đã được tự động gộp:

---
Dùng split cắt theo dấu phẩy.
Đếm các phần tử không có dấu cộng -> xong phần 1.
Các phần tử có dấu cộng thì lấy thằng phía sau và nhét nó vào mở đóng ngoặc --> xong phần 2.
Cuối dùng ghép 2 phần kia lại là xong.
Cái này đúng ý của mình rồi
 
Lần chỉnh sửa cuối:
Upvote 0
Trời mình nói là chỉ có 1 đoạn text mà dữ liệu gì nữa.
A2,3,5,1+15,9, 10,7+4 kết quả =5;(15);(4).
Nó theo quy luật thì chỉ cần 1 ví dụ cũng được chứ có sao đâu nhỉ ???
Nếu ngay từ đầu bạn nói rõ:
1/ Đây là ví dụ mẫu.
2/ Quy luật như sau (thể hiện hết các chi tiết kể cả số sẽ bỏ qua).
3/ Và đây là kết quả mong muốn.
Thì đã không có các bài từ #2 đến bài này.
 
Upvote 0
Trời mình nói là chỉ có 1 đoạn text mà dữ liệu gì nữa.
A2,3,5,1+15,9, 10,7+4 kết quả =5;(15);(4).
Nó theo quy luật thì chỉ cần 1 ví dụ cũng được chứ có sao đâu nhỉ ???
Bài đã được tự động gộp:


Cái này đúng ý của mình rồi
Hy vọng giúp ích bạn:
Mã:
Option Explicit

Function DemSo(Str As String) As String
Dim Txt As String, Tmp As Variant, I As Long, Num As Long
Dim J As Long, K As Long, Res()
Txt = Replace(Str, " ", "")
Tmp = Split(Txt, ",")
ReDim Res(0)
For I = 0 To UBound(Tmp)
    If IsNumeric(Tmp(I)) Then
        Num = Num + 1
    Else
        J = InStr(Tmp(I), "+")
        If J = 0 Then
            If HasNumber(Tmp(I)) Then Num = Num + 1
        Else
            K = K + 1
            ReDim Preserve Res(K)
            Res(K) = "(" & Mid(Tmp(I), J + 1, Len(Tmp(I))) & ")"
        End If
    End If
Next
Res(0) = Num
DemSo = Join(Res, ";")
End Function

Private Function HasNumber(ByVal MyStr As String) As Boolean
Dim I As Long
If Len(MyStr) = 0 Then HasNumber = False
For I = 1 To Len(MyStr)
    If IsNumeric(Mid(MyStr, I, 1)) Then HasNumber = True: Exit For
Next
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Hy vọng giúp ích bạn:
Mã:
Option Explicit

Function DemSo(Str As String) As String
Dim Txt As String, Tmp As Variant, I As Long, Num As Long
Dim J As Long, K As Long, Res()
Txt = Replace(Str, " ", "")
Tmp = Split(Txt, ",")
For I = 0 To UBound(Tmp)
    If IsNumeric(Tmp(I)) Then
        Num = Num + 1
    Else
        J = InStr(Tmp(I), "+")
        If J = 0 Then
            If HasNumber(Tmp(I)) Then Num = Num + 1
        Else
            K = K + 1
            ReDim Preserve Res(K)
            Res(K) = "(" & Mid(Tmp(I), J + 1, Len(Tmp(I))) & ")"
        End If
    End If
Next
Res(0) = Num
DemSo = Join(Res, ";")
End Function

Private Function HasNumber(ByVal MyStr As String) As Boolean
Dim I As Long
If Len(MyStr) = 0 Then HasNumber = False
For I = 1 To Len(MyStr)
    If IsNumeric(Mid(MyStr, I, 1)) Then HasNumber = True: Exit For
Next
End Function
Cám ơn bạn ok rồi
 
Upvote 0
Upvote 0
Chào mọi người.
Mình có yêu cầu là đếm số number trong đoạn text mà máy hôm nay mình tìm hiểu mà chưa có kết quả. Nay post lên nhờ mọi người hướng dẫn giúp mình.
Ví dụ: mình có 1 đoạn text là
A1,12,8,7+8,9,14+3
Mỗi số điều ngăn cách bằng dấu ,
Kết quả mình muốn là
Có 4 số 1,12,8,9
Có 2 số có dấu + thì đóng ngoặc ;(8);(3)

=4;(8);(3)

Xin cảm ơn
Thử function DemSoX
Mã:
Function DemSoX(Str As String) As String
  Dim S, Res(), i&, j&, k&, t&, n&, tmp$

  S = Split(Replace(Str, " ", ""), ",")
  For i = 0 To UBound(S)
    tmp = S(i): n = Len(tmp)
    For j = 1 To n
      If IsNumeric(Mid(tmp, j, 1)) Then Exit For
    Next j
    If j <= n Then
      j = InStr(1, tmp, "+")
      If j > 0 Then
        k = k + 1
        ReDim Preserve Res(1 To k)
        Res(k) = "(" & Mid(tmp, j + 1, n) & ")"
      Else
        t = t + 1
      End If
    End If
  Next i
  DemSoX = t & ";" & Join(Res, ";")
End Function
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom