Tạo mã cho Học sinh (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

vien1805

Thành viên mới
Tham gia
7/10/11
Bài viết
3
Được thích
0
Chào các bác thông thái!
Em muốn nhờ các bác thông thái giúp e công thức tách tên lấy kí tự của họ tên đầy đủ của học sinh để làm mã HS
VD
- Lớp: A1

Họ và tên HS

Mã HS





A1

Nguyễn Thành An

a1nta

E muốn tạo mã HS như thế này áp dụng công thức nào các bác chỉ giáo giúp em với ạ










































[TD='top']
Lớp
[/TD]
 
Vậy bộ mã này của bạn chỉ xài 1 năm học thôi à?
Trong khi đó, tài liệu kiểu này fải lưu đến 15 năm mới được hủy thì mần răng bây chừ?
Mình gợi í bạn bộ mã vầy nè:
PHP:
'
Mã HS         Họ & Tên        '
NVH00  Nguyễn Việt Hồng
NVH01  Ngô Thị Viết Hoa
NVH02  Nhữ Văn Hoàn
NFD00  Ngô Đình Dương
NJF00   Nguyễn Đức
TAA00  Trần Ái Ân
CNM00  Công Tằng Tôn Nữ Nguyệt Minh
ADL00  Âu Dương Lân
. . .         . . . . .
Nếu bạn chấp nhận như gợi í mình sẽ tiếp tục với bạn!
 
Chào các bác thông thái!
Em muốn nhờ các bác thông thái giúp e công thức tách tên lấy kí tự của họ tên đầy đủ của học sinh để làm mã HS
VD
- Lớp: A1

Họ và tên HS

Mã HS





A1

Nguyễn Thành An

a1nta

E muốn tạo mã HS như thế này áp dụng công thức nào các bác chỉ giáo giúp em với ạ










































[TD='top']
Lớp
[/TD]

Trường hợp lớp A1 có 2 người tên Nguyễn Thành An thì tính sao? Các bạn nghĩ cách đặt mã kiểu này không ổn chút nào. Nếu là tôi thì tôi sẽ đặt theo nguyên tắc: Niên khóa-Lớp-STT
Sao cứ phải lấy tên làm mã? Thật không hiểu nổi.
 
Láy tên làm mã để có tính tương tác giữa HS với người quản lý HS à nha!

Nói rõ hơn: Trong 1 trường có 250 em / 4.500 có tên bắt đầu vần H cũng dễ tìm & lọc ra em HS có tên là Trần Minh Hồng cái rụp!
 
Lần chỉnh sửa cuối:
Láy tên làm mã để có tính tương tác giữa HS với người quản lý HS à nha!
Tương tác đã có chương trình nó lo rồi sư phụ à (VBA hoặc công thức), vì cho dù cố lấy tên làm mã thì sư phụ cũng không thể nhìn vào NTA mà đoán được đó là Nguyễn Thành An đâu.
Làm việc trên máy tính thì cần tính khoa học và logic, một mã tốt phải có tính mở rộng. Theo cách của sư phụ thì dang mã NVH01, NVH02... có khả năm phá sản trong tương lai nếu 2 số đuôi vượt qua 99
 
. Theo cách của sư phụ thì dang mã NVH01, NVH02... có khả năm phá sản trong tương lai nếu 2 số đuôi vượt qua 99
Chú mầy nhằm rồi
TVH0Z hay TVHZZ thì là bao nhiêu em?

Mình đã áp dụng trên thực địa 1 trường cấp 2 & 3 với 1.500 HS chĩ cao nhất xài đến 17 hay 18 số mà thôi; yên tâm lớn đi chú!
 
Láy tên làm mã để có tính tương tác giữa HS với người quản lý HS à nha!

Nói rõ hơn trong 1 trường có 250 em / 4.500 có tên bắt đầu vần H cũng dễ tìm & lọc ra;
Tôi chẳng thấy tính tương tác có ý nghĩa gì trong viêc tạo mã.
Mỗi năm trường tôi có khoảng 1500 HS nhâp học, Mã HS trong sổ danh bạ là yyyy/xxxx (năm/STT trúng tuyển theo ds ABC đầu năm được duyệt), cứ như số CMND chẳng có "tương tác" nào cả vẫn xài được bình thường từ trước giải phóng đến nay.
Thời kỹ thuật số chứ đâu còn thời "máy đánh chữ" mà anh quá quan tâm chuyện tương tác.
Công ty ABC thì cứ thằng nào vào trước phát cho nó cái số duy nhất ABC0001, thằng kế ABC0002... số của mình mà không nhớ thì khi liên hệ bộ phận văn phòng nói tên, năm sinh, hoặc số CMND là tìm ra ngay, "NTF000" có khi chỉ mình người tạo mã mới nhớ, bộ phận văn phòng cũng phải làm công việc là tìm xem NTF này là thằng nào.
Tùy duyên đi. biển số 67F7 3242 chẳng tương tác gì với tui nhưng công an vẫn biết nó là xe của tui.
 
Vậy các học bạ ta sẽ quản thế nào, nhỉ? Có fải mỗi em ta bỏ vô 1 bì & ở ngoài bì ta đề cái gì lên đó để sắp xếp vô tủ & lấy ra cho nhanh đây?
Khi đó vần 'D', 'H' & 'N' cứ fải cơi nới hoài chăng?
Hay trường bạn lại bở các bì của 1 lớp vô bì to hơn?
 
Chú mầy nhằm rồi
TVH0Z hay TVHZZ thì là bao nhiêu em?

Mình đã áp dụng trên thực địa 1 trường cấp 2 & 3 với 1.500 HS chĩ cao nhất xài đến 17 hay 18 số mà thôi; yên tâm lớn đi chú!
Tức là sư phụ vẫn không chắc được 2 con số cuối sẽ kết thúc ở bao nhiêu? Đến đâu mở rộng đến đó, hết mở rộng được thì... ngưng? Cách của em thì chắc chắn đó, mở rộng đến 100 năm vẫn ngon
Vậy các học bạ ta sẽ quản thế nào, nhỉ? Có fải mỗi em ta bỏ vô 1 bì & ở ngoài bì ta đề cái gì lên đó để sắp xếp vô tủ & lấy ra cho nhanh đây?
Khi đó vần 'D', 'H' & 'N' cứ fải cơi nới hoài chăng?
Hay trường bạn lại bở các bì của 1 lớp vô bì to hơn?
Nếu tính đến tương lai thì thậm chí cũng không cần học bạ hay hộ khẩu đâu sư phụ à! Mọi thứ lưu trên server, cần thì tra thôi
 
Mình thì đinh ninh rằng không chờ đượic đến khi bò hộ khẩu hay học bạ đâu.

Cứ tháng nhậu 4 năm cữ thì vài năm nữa bị cắt hộ khẩu rồi!

Còn tài liệu thì các nước thông thường 30 năm là giải mật rồi; Nước ta hình như 15 hay 20 năm với tài liệu thông thường thì fải.
 
Chào các bác thông thái!
Em muốn nhờ các bác thông thái giúp e công thức tách tên lấy kí tự của họ tên đầy đủ của học sinh để làm mã HS
VD
- Lớp: A1

Họ và tên HS

Mã HS





A1

Nguyễn Thành An

a1nta

E muốn tạo mã HS như thế này áp dụng công thức nào các bác chỉ giáo giúp em với ạ










































[TD='top']
Lớp
[/TD]

Ô A1 là A1, ô B1 là Nguyễn Thành An
Tại ô C1 bạn gõ công thức như sau =LOWER(A1&LEFT(B1,1)&MID(B1,(FIND(" ",B1)+1),1)&MID(B1,(FIND(" ",B1,(FIND(" ",B1)+1))+1),1))
 
Chào các bác thông thái!
Em muốn nhờ các bác thông thái giúp e công thức tách tên lấy kí tự của họ tên đầy đủ của học sinh để làm mã HS
VD
- Lớp: A1

Họ và tên HS

Mã HS





A1

Nguyễn Thành An

a1nta

E muốn tạo mã HS như thế này áp dụng công thức nào các bác chỉ giáo giúp em với ạ










































[TD='top']
Lớp
[/TD]

Bạn thử dùng công cụ Text to column tách ra thành từng chữ trong họ và tên sau đó dùng hàm left nối lại. Hihi, mình không có cao siêu về excel nhưng cách thức căn bản mình hay làm là như vậy ak
 
Bạn thử dùng công cụ Text to column tách ra thành từng chữ trong họ và tên sau đó dùng hàm left nối lại. Hihi, mình không có cao siêu về excel nhưng cách thức căn bản mình hay làm là như vậy ak
Cứ cho vậy là làm được đi; Nhưng tác giả bài đăng chưa nói đến việc trường hợp tên Trân Lê Ái Ân thì sao; Chả lẻ lấy cả dấu thanh vô mã?
Lúc đó ông Bộ GD & ĐT lại fải qui định Font chữ thống nhất nữa hay sao?
 

File đính kèm

Em cám ơn các bác. Vậy bác nào có cao kiến tạo mã hs giúp e với. Hs của bọn e là lớp mầm. E muốn tạo mã hs như vậy để e làm sổ theo dõi thu, chấm ăn từng lớp. Để khi e sang các sổ Vd như thu hàng ngày chẳng hạn e chỉ cần đánh mã theo tên như vậy là ra hs lớp nào. Hay là e cho thêm số tt 001 nữa Vd tạo mã “001a1nta” như vậy chắc sẽ k lo bị trùng tên nhau đúng k an. Vấn đề là e k biết công thức tách tn đc tên của hs lấy chữ cái đầu
 
Em cám ơn các bác. Vậy bác nào có cao kiến tạo mã hs giúp e với. Hs của bọn e là lớp mầm. E muốn tạo mã hs như vậy để e làm sổ theo dõi thu, chấm ăn từng lớp. Để khi e sang các sổ Vd như thu hàng ngày chẳng hạn e chỉ cần đánh mã theo tên như vậy là ra hs lớp nào. Hay là e cho thêm số tt 001 nữa Vd tạo mã “001a1nta” như vậy chắc sẽ k lo bị trùng tên nhau đúng k an. Vấn đề là e k biết công thức tách tn đc tên của hs lấy chữ cái đầu
Cách mình tạo mã học sinh như sau ( có thể coi như gợi ý cho bạn trong lúc chờ đợi các anh chị khác) :
- Mình tách tên học sinh lấy mã ( code của bác SA_DQ và bác Hoàng2013 )
- Kết hợp với ngày tháng năm sinh 6 chữ số.
Trường mình có khoảng 1000 học sinh nhưng chưa có trùng ( có lẽ cũng sẽ trùng nhưng tỉ lệ là rất thấp).
Còn muốn lọc theo lớp thì mình sẽ tiếp tục sau. Vì cá nhân mình nghĩ tạo mã hs là để tìm kiếm cá nhân thông tin học sinh nào đó cho nhanh chóng.
 
Vậy các học bạ ta sẽ quản thế nào, nhỉ? Có fải mỗi em ta bỏ vô 1 bì & ở ngoài bì ta đề cái gì lên đó để sắp xếp vô tủ & lấy ra cho nhanh đây?
Khi đó vần 'D', 'H' & 'N' cứ fải cơi nới hoài chăng?
Hay trường bạn lại bở các bì của 1 lớp vô bì to hơn?
Hổng dám đâu!
Mỗi năm 1 "đống" từ 0001 đến cuối. Lấy dây bó lại 1 bó, 3 năm sau phát ra cho nó hết "gồi".
Nếu em nào không lấy thì bó lại vài cuốn theo năm yyyy. Hết. Chẳng có tương tác cái gì cả.
---------------------------
Nói vậy thôi.
Đầu năm cứ lấy danh sách trúng tuyển theo ABC, gán cho nó 1 cái yyyy/xxxx, cho vào sổ danh bộ của trường, dán thêm cái hình vào, cùng tất cả thông tin cá nhân.
Từ danh sách này lại chia ra vài chục lớp, "lục lại" theo "xxxx" mà "bó" theo lớp cho GV sử dụng.
Sổ danh bộ thì phải có để "trăm năm sau" vẫn còn dò được yyyy nào, em nào, lớp nào... có học, tốt nghiệp hay không. Đã nhân lại hồ sơ gì phải ký nhận ... vào đó. Đó là hồ sơ "giấy trắng mực đen", còn muốn gì thì vào "thế giới trên mây" mà tìm.
Chỉ cần gõ Ba Tê ra một đống Ba Tê, hỏi ngày tháng năm sinh là biết số danh bộ, Moi cái "bó yyyy" đó ra là xong, đâu cần phải tương tác?
 
Lần chỉnh sửa cuối:
Chả lẽ cái tên Ba Tê đó là không tương tác?
Có khi làm vài xị lại gõ nhầm sang Ba Té thì xĩu!

Gõ Nguễn Văn Thành nhanh hơn gõ NVT?


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CHUYỆN VỀ BỎ HỘ KHẨU . . . . . . . . . . . . . . . . . . . . . . . . .
Mình nhớ lúc mới nghỉ hưu, đi đăng kí khai sinh cho thằng cháu để đi học lớp lá;
Lúc đó đã nói để chuyện bỏ hộ khẩu rồi; (Nhớ chuyện này do chậm khai sinh nên bố mẹ nó bị fạt 70 ngàn hay sau í.
Giờ thằng cháu sắp vô lớp Tám rồi mà đã đâu vào đâu về bỏ chuyện này!

Cho nên đừng nghe CS nói; Hãy xem CS làm!
 
Lần chỉnh sửa cuối:
Trường hợp lớp A1 có 2 người tên Nguyễn Thành An thì tính sao? Các bạn nghĩ cách đặt mã kiểu này không ổn chút nào. Nếu là tôi thì tôi sẽ đặt theo nguyên tắc: Niên khóa-Lớp-STT
Sao cứ phải lấy tên làm mã? Thật không hiểu nổi.
Lớp không ổn, mỗi năm lớp sẽ thay đổi nên từ khóa Lớp trong mã là lớp của nhiều năm trước không ý nghĩa gợi nhớ nhiều, chỉ cần Niên khóa-STT là đủ
 
Lớp không ổn, mỗi năm lớp sẽ thay đổi nên từ khóa Lớp trong mã là lớp của nhiều năm trước không ý nghĩa gợi nhớ nhiều, chỉ cần Niên khóa-STT là đủ
Chỉ là tăng khả năng tìm kiếm thôi mà, không có không sao nhưng có thì càng tốt
 
mình nghĩ chưa đủ bạn ơi. Nếu tên dài hơn ba chữ thì sao bạn?
Của bạn đây
=IFERROR(IF(IFERROR(FIND(" ",B1,(FIND(" ",B1,(FIND(" ",B1))+1))+1),0)=0,LOWER(A1&LEFT(B1,1)&MID(B1,(FIND(" ",B1)+1),1)&MID(B1,(FIND(" ",B1,(FIND(" ",B1)+1))+1),1)),LOWER(A1&LEFT(B1,1)&(MID(B1,(FIND(" ",B1))+1,1))&(MID(B1,(FIND(" ",B1,(FIND(" ",B1))+1))+1,1))&(MID(B1,(FIND(" ",B1,(FIND(" ",B1,(FIND(" ",B1))+1))+1))+1,1)))),"")
 
Bọn e là mầm nên bọn e k có niên khoá ak. Và mỗi năm học sinh bọn em lại tuyển mới thêm 3.4.5 tuổi năm nào cũng có thêm. Bg e cần bác nào chỉ giáo e công thức đổi cột B1= Nguyễn Thành An thành B1= nta.
Hoặc tên của bạn nào mà bốn chữ vẫn chỉ lấy đc chữ cái đầu thoii ạ
E cảm ơn cả nhà đã cho e ý kiến ah!
 
Cứ mấy bài Nối chuỗi là cứ nhớ đến hàm JoinText() hoặc JoinIf() của thầy @ndu96081631 (Theo link bài #5)
Cụ thể: A1= "A1"; B1= "Nguyễn Thành An"
Mã:
C1=A1&JoinText("",1,INDEX(LEFT(TRIM(MID(SUBSTITUTE(B1," ",REPT(" ",100)),(ROW($1:$10)-1)*100+1,100))),))
Enter fill xuống.
Thân.
Nếu excel có hỗ trợ Flash fill, thì dùng nó sẽ ngon hơn đấy bạn vì có pattern sẵn rồi!!
 
Chào các bác thông thái!
Em muốn nhờ các bác thông thái giúp e công thức tách tên lấy kí tự của họ tên đầy đủ của học sinh để làm mã HS
VD
- Lớp: A1

Họ và tên HS

Mã HS





A1

Nguyễn Thành An

a1nta

E muốn tạo mã HS như thế này áp dụng công thức nào các bác chỉ giáo giúp em với ạ










































[TD='top']
Lớp
[/TD]

Vì tương lai các cháu nhi đồng, chịu khó nhấp công thức dài một chút
Mã:
=A1&MID(TRIM(B1),1,1)&MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",1))+1,1)&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",2))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",3))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",4))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",5))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",6))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",7))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",8))+1,1),"")
 

File đính kèm

Dùng luôn cột Stt mà đánh mã có phải nhanh không? chẳng phải no cái chuyện chùng gì cả.
 
Vì tương lai các cháu nhi đồng, chịu khó nhấp công thức dài một chút
Mã:
=A1&MID(TRIM(B1),1,1)&MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",1))+1,1)&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",2))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",3))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",4))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",5))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",6))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",7))+1,1),"")&IFERROR(MID(TRIM(B1),FIND("#",SUBSTITUTE(TRIM(B1)," ","#",8))+1,1),"")

Đụng mấy bài xử lý chuỗi đúng là ngứa tay thật, mượn file bạn thêm code cho đủ bộ luôn.
PHP:
Function ghep(str As String)
With CreateObject("vbscript.regexp")
    .Global = True: .Pattern = "(\S)\S+\s"
    If .test(str & " ") Then ghep = .Replace(str & " ", "$1")
End With
End Function
Công thức=A1&"-"&ghep(B1)
 
Đụng mấy bài xử lý chuỗi đúng là ngứa tay thật, mượn file bạn thêm code cho đủ bộ luôn.
PHP:
Function ghep(str As String)
With CreateObject("vbscript.regexp")
    .Global = True: .Pattern = "(\S)\S+\s"
    If .test(str & " ") Then ghep = .Replace(str & " ", "$1")
End With
End Function
Công thức=A1&"-"&ghep(B1)
(Vì hàm dùng trên bảng tính) Buồn 'mắt' xin chỉnh lại tẹo... :):)

PHP:
Function ghep(ByVal str As String) As String
Static oReg As Object
If oReg Is Nothing Then Set oReg = CreateObject("vbscript.regexp")
With oReg
    .Global = True: .Pattern = "(\S)\S+\s"
    If .test(str & " ") Then ghep = .Replace(str & " ", "$1")
End With
End Function

--------
Sao giờ font chữ trong mấy thẻ code nhìn xấu thế, lại còn để chữ in nghiêng nữa chứ!
 
Đụng mấy bài xử lý chuỗi đúng là ngứa tay thật, mượn file bạn thêm code cho đủ bộ luôn.
PHP:
Function ghep(str As String)
With CreateObject("vbscript.regexp")
    .Global = True: .Pattern = "(\S)\S+\s"
    If .test(str & " ") Then ghep = .Replace(str & " ", "$1")
End With
End Function
Công thức=A1&"-"&ghep(B1)
Cả 4 công thức đều còn thiếu hàm LOWER() bao ở ngoài, thì lúc đó kết quả mới đúng ý chủ thớt.
Nên tổng hợp cả 4 vào "nồi lẩu" kèm dưới đây, anh em "nhậu" chung buổi họp mặt.
Khà khà khà.
/-*+//-*+//-*+/
 

File đính kèm

Bọn e là mầm nên bọn e k có niên khoá ak. Và mỗi năm học sinh bọn em lại tuyển mới thêm 3.4.5 tuổi năm nào cũng có thêm. Bg e cần bác nào chỉ giáo e công thức đổi cột B1= Nguyễn Thành An thành B1= nta.
Hoặc tên của bạn nào mà bốn chữ vẫn chỉ lấy đc chữ cái đầu thoii ạ
E cảm ơn cả nhà đã cho e ý kiến ah!
Của bạn đây =IFERROR(IF(IFERROR(FIND(" ",B1,(FIND(" ",B1,(FIND(" ",B1))+1))+1),0)=0,LOWER(LEFT(B1,1)&MID(B1,(FIND(" ",B1)+1),1)&MID(B1,(FIND(" ",B1,(FIND(" ",B1)+1))+1),1)),LOWER(LEFT(B1,1)&(MID(B1,(FIND(" ",B1))+1,1))&(MID(B1,(FIND(" ",B1,(FIND(" ",B1))+1))+1,1))&(MID(B1,(FIND(" ",B1,(FIND(" ",B1,(FIND(" ",B1))+1))+1))+1,1)))),"")
 
Cả 4 công thức đều còn thiếu hàm LOWER() bao ở ngoài, thì lúc đó kết quả mới đúng ý chủ thớt.
Nên tổng hợp cả 4 vào "nồi lẩu" kèm dưới đây, anh em "nhậu" chung buổi họp mặt.
Khà khà khà.
/-*+//-*+//-*+/
Trong bốn anh em chỉ có mình là "nông dân" nhất, dùng cuốc, cuốc mấy chục nhát mới xong. Khà khà /-*+//-*+//-*+/
Chúc các bạn 1 tối vui
 
(Vì hàm dùng trên bảng tính) Buồn 'mắt' xin chỉnh lại tẹo... :):)

PHP:
Function ghep(ByVal str As String) As String
Static oReg As Object
If oReg Is Nothing Then Set oReg = CreateObject("vbscript.regexp")
With oReg
    .Global = True: .Pattern = "(\S)\S+\s"
    If .test(str & " ") Then ghep = .Replace(str & " ", "$1")
End With
End Function

--------
Sao giờ font chữ trong mấy thẻ code nhìn xấu thế, lại còn để chữ in nghiêng nữa chứ!
Cái này hay, dù biết reg nó dựng lại nhiều lần, nhưng không biết xử lý sao, cám ơn bạn.
Thử với Byref cũng được.
 
Lần chỉnh sửa cuối:
Nói chuyện mã mới nhớ đến chuyện fiếu đục lỗ trong thư viện của trường năm 68-70; Fiếu này dùng để quản lí hàng triệu quyển sách thư viện của nhà trường & các thư viện liên kết khác.
Trên các cạnh của fiếu người ta đục rất nhiều lỗ; Trong đó 1 cạch giành cho thủ thư & 3 cạnh còn lại dành cho người đọc
Muốn ngâm cứu sách về ngành nào ta chỉ việc xỏ que xuyên qua hộp (bảo quản fiếu) & nâng lên là ta được các fiếu mục tiêu ta cần.
& cái quan trọng là các fiếu đó không cần xếp theo trật tự nào cả
 
Với tên Đỗ Văn Ân, nếu tác giả muốn kết quả là DVA thì toàn bộ giải pháp công thức sẽ phá sản. Ngoài ra cái chuyện trùng tên tôi nhắc từ đầu cũng không thấy chủ topic phản hồi
Dạng yêu cầu này có nhiều rồi và giải quyết không khó. Vấn đề ở đây tôi nghĩ rằng chính tác giả cũng không lường hết những tình huống mà mình có thể gặp phải, cuối cùng là gây mất thời gian cho người trợ giúp
 
(Vì hàm dùng trên bảng tính) Buồn 'mắt' xin chỉnh lại tẹo... :):)

PHP:
Function ghep(ByVal str As String) As String
Static oReg As Object
If oReg Is Nothing Then Set oReg = CreateObject("vbscript.regexp")
With oReg
    .Global = True: .Pattern = "(\S)\S+\s"
    If .test(str & " ") Then ghep = .Replace(str & " ", "$1")
End With
End Function

--------
Sao giờ font chữ trong mấy thẻ code nhìn xấu thế, lại còn để chữ in nghiêng nữa chứ!
?
Pattern này sai. Nếu gặp tên "nguyen van a be" nó sẽ ra là "nva b", và nếu có dấu cách đầu câu, nó vẫn giữ dấu cách đó.

Thử pattern này: "\W*(\w)\w*\W*)
(không cần phải cộng " " vào cuối chuỗi)
 
?
Pattern này sai. Nếu gặp tên "nguyen van a be" nó sẽ ra là "nva b", và nếu có dấu cách đầu câu, nó vẫn giữ dấu cách đó.

Thử pattern này: "\W*(\w)\w*\W*)
(không cần phải cộng " " vào cuối chuỗi)
Không lường hết các trường hợp, nên viết pattern thiếu là chuyện bình thường, trong chuỗi là tiếng việt thì \w và \W không thể sử dụng được.
Sửa lại pattern cho các trường hợp này: "\s*(\S)\S*\s?" hoặc "(\S)\S*\s?" thêm hàm Trim
 
Theo mình chủ bài đăng nên chọn bộ mã như sau:
HMNTH0
Ở đây H là năm học hay năm sinh của bé; H là 2018, năm sau sẽ là 'I'
M là lớp mần; lớp lá sẽ là 'L'
NTH0 là 3 kí tự tiêu biểu cho họ & tên & thêm 1 số để loại trùng tên của bé theo luật sau:
PHP:
'
Mã NTH0       Họ & Tên
NTH0      Nguyễn Thanh Hải
NTH1      Ngô Thị Thành Hoa
NJF0      Nguyễn Đức
CNM0      Công tằng Tôn Nữ Nguyệt Minh
HJA0      Hà Ẩu
ADF0      Âu Dương Đông
. . . .          . . . . .
 
Sửa lại pattern cho các trường hợp này: "\s*(\S)\S*\s?" hoặc "(\S)\S*\s?" thêm hàm Trim
Sau một đống \s thì đương nhiên là \S rồi. Vì vậy chỉ cần bắt ký tự ấy bằng dấu chấm là được

Chú: nếu muốn dùng \s thì mẫu như vầy cũng được. Tuy nhiên tôi cũng không rõ giảm được cái phần \s? ở sau thì có nhanh hơn. Chỉ là thường thì xét đầu câu (dấu mũ ^) an toàn hơn:
"(?:^|\s+)(.)\S*"
 
Sau một đống \s thì đương nhiên là \S rồi. Vì vậy chỉ cần bắt ký tự ấy bằng dấu chấm là được

Chú: nếu muốn dùng \s thì mẫu như vầy cũng được. Tuy nhiên tôi cũng không rõ giảm được cái phần \s? ở sau thì có nhanh hơn. Chỉ là thường thì xét đầu câu (dấu mũ ^) an toàn hơn:
"(?:^|\s+)(.)\S*"
Pattern của tôi (\S) thay bằng (.) cũng được, tôi đã quen kiểu như thằng này và không phải thằng này cho an toàn, còn cái pattern của bạn "(?:^|\s+)(.)\S*" nó sẽ ưu tiên đầu câu trước tức là "^(.)\S*" như vậy \s ở đầu câu cũng thỏa pattern cho nên trường hợp này sẽ bị sai, để đúng thi phải chỉnh (.) thành (\S).
Còn trường hợp \s? có thể bỏ đi cũng được vì tôi quên mất đã xét \s ở đầu thì không cần xét \s ở cuối nữa.
 
Còn trường hợp \s? có thể bỏ đi cũng được vì tôi quên mất đã xét \s ở đầu thì không cần xét \s ở cuối nữa.
Rất tiếc là cả tôi lẫn bạn đều trật chỗ này. Những chỗ cách cuối câu vẫn chưa đi hết.
Hình như phải \s* hay \s+ ở cuối nó mới chịu đi hết.
(Cái này mệt quá. Phải viết một sub đẻ ra cỡ vài chục trường hợp mới tét hết)

Chú thích: cái này làm chơi cho vui thôi. Chứ thực tế thì dùng một cái mẫu đơn giản cộng hàm Application.Trim sẽ hiệu quả hơn.
 
Lần chỉnh sửa cuối:
Rất tiếc là cả tôi lẫn bạn đều trật chỗ này. Những chỗ cách cuối câu vẫn chưa đi hết.
Hình như phải \s* hay \s+ ở cuối nó mới chịu đi hết.
(Cái này mệt quá. Phải viết một sub đẻ ra cỡ vài chục trường hợp mới tét hết)

Chú thích: cái này làm chơi cho vui thôi. Chứ thực tế thì dùng một cái mẫu đơn giản cộng hàm Application.Trim sẽ hiệu quả hơn.
Đúng là phải thêm \s* cho trường hợp cuối chuỗi ($) toàn \s. Mà thôi, dữ liệu cho nhiêu thì viết nhiêu, nếu có phát sinh mới thì viết thêm cho dễ, chứ làm một lần cho tất cả các trường hợp thì nhức đầu lắm.
 
Ngoài lề: DHN46 ủng hộ ý kiến thầy Ba Tê. Cách lập mã nghe đơn giản nhưng làm thì phức tạp. Người quản trị dữ liệu nên làm theo thứ tự, tra cứu đã có hệ thống.

Cứ làm kiểu chủ topic đến lúc tra cứu vô tình "tưởng" anh mã là như thế này vì là quy tắc abc..blabla là sai hết, vô tình tạo thói quen xấu, mặc định nghĩ quy tắc của mã mà đoán.
 
...
Cứ làm kiểu chủ topic đến lúc tra cứu vô tình "tưởng" anh mã là như thế này vì là quy tắc abc..blabla là sai hết, vô tình tạo thói quen xấu, mặc định nghĩ quy tắc của mã mà đoán.
Trên thực tế, rất hiếm hệ thống có khả năng lập mã theo tên. Hầu như hệ thống nào cũng bắt buộc người dùng trải qua huấn luyện, không nhiều thì ít.
Ít thì cũng phải rõ nguyên tắc và quá trình mã hóa.
Nhiều thì phải học qua các cách phát âm để đoán mã. Ví dụ điển hình là ký tự Y, anh Nguyễn Văn Y cũng có khi được người ta mã thành NVI
(Hồi xưa tôi có học chung với anh bạn tên Giương. Anh ta luôn luôn bị vấn đề lục sổ, vì người ta gần như luôn tự động lục tên anh trong vần D)

Chú: theo nguyên tắc CSDL LH, lập mã theo tên là sái chuẩn.
 
Trên thực tế, rất hiếm hệ thống có khả năng lập mã theo tên. Hầu như hệ thống nào cũng bắt buộc người dùng trải qua huấn luyện, không nhiều thì ít.
Ít thì cũng phải rõ nguyên tắc và quá trình mã hóa.
Nhiều thì phải học qua các cách phát âm để đoán mã. Ví dụ điển hình là ký tự Y, anh Nguyễn Văn Y cũng có khi được người ta mã thành NVI
(Hồi xưa tôi có học chung với anh bạn tên Giương. Anh ta luôn luôn bị vấn đề lục sổ, vì người ta gần như luôn tự động lục tên anh trong vần D)

Chú: theo nguyên tắc CSDL LH, lập mã theo tên là sái chuẩn.
"Lập mã theo tên là sai chuẩn" quá chuẩn, nhưng thực tế sai chuẩn lại khá phổ biến, vậy có cần lập chuẩn mới không? :)
 
"Lập mã theo tên là sai chuẩn" quá chuẩn, nhưng thực tế sai chuẩn lại khá phổ biến, vậy có cần lập chuẩn mới không? :)
Tôi không hề muốn nói đến từ "chuẩn" trong "chuẩn xác", và lại càng không muốn đề cập đến "chuẩn" trong "tiêu chuẩn"
Cái tôi nói là CSDL Liên Hệ (Relational Database). Từ "chuẩn" được dịch từ một trạng thái mà tiếng chuyên môn gọi là "normalise/ize"
Trong CSDL LH, một trường (cột) được lập ra từ trị của một trường khác thì là không đạt chuẩn bậc 2 (2nd normal form). CSDL LH lý tưởng thường nhắm đến bậc 3 (gú gồ từ khoá "3rd normal form). Tôi dùng từ "sái" để nói là không đạt chuẩn chứ tôi không nói là "sai".
 
Tôi không hề muốn nói đến từ "chuẩn" trong "chuẩn xác", và lại càng không muốn đề cập đến "chuẩn" trong "tiêu chuẩn"
Cái tôi nói là CSDL Liên Hệ (Relational Database). Từ "chuẩn" được dịch từ một trạng thái mà tiếng chuyên môn gọi là "normalise/ize"
Trong CSDL LH, một trường (cột) được lập ra từ trị của một trường khác thì là không đạt chuẩn bậc 2 (2nd normal form). CSDL LH lý tưởng thường nhắm đến bậc 3 (gú gồ từ khoá "3rd normal form). Tôi dùng từ "sái" để nói là không đạt chuẩn chứ tôi không nói là "sai".
Từ "sái" ít dùng nên tưởng bạn gõ nhầm, mình nghỉ "sái", "sai", "trật" có nghĩa tương tự nhau, "sái khớp" "trật khớp" cùng nghĩa, có thể từ "sai" được đọc trại từ "sái" trước đây
 
Từ "sái" ít dùng nên tưởng bạn gõ nhầm, mình nghỉ "sái", "sai", "trật" có nghĩa tương tự nhau, "sái khớp" "trật khớp" cùng nghĩa, có thể từ "sai" được đọc trại từ "sái" trước đây
Sái với sai là 1 chữ. Tôi chỉ cố tình dùng ở đây để ghép chặt nó vào từ chuẩn. Tức là muốn nói "chuẩn lệch", phân biệt với "sai với chuẩn".
Đúng ra thì toi phải nói "ngoại chuẩn" hoặc "phản chuẩn".
Ngay cả từ normalise/ize tiếng Anh dịch ra tiếng Việt thành chuẩn hóa nghe cũng không thuận lắm (tiếng Hán là chính quy hóa).
 

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

Back
Top Bottom