vb6 và vbnet nói chung về code cơ bản giống nhau, chẳng qua vb net mới hơn thêm 1 ít mắn muối, 2 cái này điều có mục đích sử dụng là sử lý và hiển thị dữ liệu từ các nguồn data thông qua ado là chính
vb6 và vbnet nói chung về code cơ bản giống nhau, chẳng qua vb net mới hơn thêm 1 ít mắn muối, 2 cái này điều có mục đích sử dụng là sử lý và hiển thị dữ liệu từ các nguồn data thông qua ado là chính
Theo ý kiến của mình thì ngày xưa cũng chuyên dùng VB6.0, tuy nhiên để thật sự dùng thì bắt đầu từ bài #4. Theo nhận xét thì VB.Net có nhiều ưu điểm hơn mà VB6.0 không có được. Mà có được cũng "trầy da tróc bàn phím" Ví dụ để hiển thị tiếng Việt Unicode trong của sổ code, trên thanh tiêu đề, msgbox, imputbox... thì VB.Net hỗ trợ luôn, gõ trong code như thế nào hay viết trên form thế nào thì hiện kết quả thế ấy...
Lúc trước tôi là tín đồ của nhà VB nên cũng từng có để ý tớiVB.Net khi NetframeWork ra đời. Quả thật là khá tương đồng nên dễ chuyển qua nhấtlà các chương trình nho nhỏ. Tiếc là tôi không có điều kiện để sử dụng nó. Tuy nhiên sau này tìm hiểu thì tôi thấy C# được đánh giá caohơn nhất là về tốc độ và sự phổ biến. Bạn có thể xem các so sánh về tốc độ thựcthi C# vs VB Net trên mạng. Về sự phổ biến, cú pháp C# hiện này còn được dùngcho nhiều script phát triển web điển hình là MVC.
Cũng như VB.NET, C# thật sự không khó. Tôi đã từng chuyển một project viết bằng VB.NET về C# trong khi hiểu biết và tài liệu về VB.NET lẫn C#chỉ gói gọn trong vài trang giấy diễn giải về từ các khóa chứ không có nổi 1 cuốn sách.
Ngoài môi trường Visual Studio của Microsoft, thì bạn có thểdùng Sharpdevelope dùng chung cho nhiều ngôn ngữ .NET. Dù ít phổ biến nhưng IDEnày cực nhẹ (chỉ vài chục mb cài đặt và khi load) và tương đầy đủ các tính năngcần thiết nhất trong khi VS rất nặng nhất là xài laptop. Bản Sharpdevelope 4.4.1 là bản ổn định nhất mà tôi hiện đangdùng.
Tại thấy nội dung hay quá mà chưa kịp hỏi tên, khả năng là một chương trình sản xuất kinh doanh gì đó, đại loại là một cơ sở dữ liệu cỡ bự với các công cụ truy xuất, tính toán, phân tích, biểu đồ, gridline, giao diện, v.v... Nhìn mà sướng cả mắt!
Tại thấy nội dung hay quá mà chưa kịp hỏi tên, khả năng là một chương trình sản xuất kinh doanh gì đó, đại loại là một cơ sở dữ liệu cỡ bự với các công cụ truy xuất, tính toán, phân tích, biểu đồ, gridline, giao diện, v.v... Nhìn mà sướng cả mắt!
Nếu anh chịu nghiên cứu thì không phải mất thời gian đến tận 2 năm như em đâu. Hy vọng thời gian ngắn anh sẽ đạt được hơn những gì mà anh đang mong đợi.
Em cũng đang thử viết một chương trình nhỏ bằng VB.Net 2008 nhưng thấy có nhiều điểm khác VB, VBA quá.
Anh HLMT và các bạn cho dhn46 hỏi: trong VB.Net dhn46 dùng
Em cũng đang thử viết một chương trình nhỏ bằng VB.Net 2008 nhưng thấy có nhiều điểm khác VB, VBA quá.
Anh HLMT và các bạn cho dhn46 hỏi: trong VB.Net dhn46 dùng
Em đang viết 1 chương trình để Edit File *.Mfd => Music Finder DataBase (dành cho đàn Yamaha), cái này nó dựa trên số byte của file *.Mfd để đọc ra các thông số.
Em đã sử dụng Excel, VB6 thì đều ra kết quả là có những khoảng trống trong file Binary, tương ứng với đọc file Text nhưng dùng VB.Net thì những khoảng trống đó không còn. Hiện em chưa biết cách xử lý, anh có thể tư vấn cho em trường hợp này?
Em đã sử dụng Excel, VB6 thì đều ra kết quả là có những khoảng trống trong file Binary, tương ứng với đọc file Text nhưng dùng VB.Net thì những khoảng trống đó không còn. Hiện em chưa biết cách xử lý, anh có thể tư vấn cho em trường hợp này?
vb6 và vbnet nói chung về code cơ bản giống nhau, chẳng qua vb net mới hơn thêm 1 ít mắn muối, 2 cái này điều có mục đích sử dụng là sử lý và hiển thị dữ liệu từ các nguồn data thông qua ado là chính
VB6 chỉ là ngôn ngữ Hướng Đối Tượng bán phần. Trong khi VB.NET hướng đối tượng coi như toàn phần. cach sử dụng gần như khác biệt nhau. Nếu bạn không thấy khác biệt là do bạn không viết code hướng đối tuợng nhiều.
Nói VB.NET thêm mắm muối là hoàn toàn sai. Các lớp (class) cung cấp bởi .NET framework được Microsoft viết theo nguyên tắc hướng đối tượng có khả năng khai triển rộng, và rất hiệu quả (xem cuối bài, tôi trả lời cho dhn46). Điển hình là các loại căn bản như integer, float, string,... đều dựa trên lớp của chúng.
Trong .NET, đừng nói chuyện ADO. Các lớp (class) của .NET làm việc với Data hiệu quả hơn nhiều, điển hình là lớp thuộc nhóm System.IO. Nếu có thì giờ thì học LINQ sẽ thấy nó rất ngon lành. Lưu ý: tôi nói "có thì giờ", nếu không có thì giờ thì đừng học mất công, vì địa bàn dùng không rộng rãi; LINQ là công cụ của Microsoft, không phải tiêu chuẩn như SQL.
Lúc trước tôi là tín đồ của nhà VB nên cũng từng có để ý tớiVB.Net khi NetframeWork ra đời. Quả thật là khá tương đồng nên dễ chuyển qua nhấtlà các chương trình nho nhỏ. Tiếc là tôi không có điều kiện để sử dụng nó.
Tuy nhiên sau này tìm hiểu thì tôi thấy C# được đánh giá caohơn nhất là về tốc độ và sự phổ biến. Bạn có thể xem các so sánh về tốc độ thựcthi C# vs VB Net trên mạng. Về sự phổ biến, cú pháp C# hiện này còn được dùngcho nhiều script phát triển web điển hình là MVC.
Cũng như VB.NET, C# thật sự không khó. Tôi đã từng chuyển một project viết bằng VB.NET về C# trong khi hiểu biết và tài liệu về VB.NET lẫn C#chỉ gói gọn trong vài trang giấy diễn giải về từ các khóa chứ không có nổi 1 cuốn sách.
Ngoài môi trường Visual Studio của Microsoft, thì bạn có thểdùng Sharpdevelope dùng chung cho nhiều ngôn ngữ .NET. Dù ít phổ biến nhưng IDEnày cực nhẹ (chỉ vài chục mb cài đặt và khi load) và tương đầy đủ các tính năngcần thiết nhất trong khi VS rất nặng nhất là xài laptop. Bản Sharpdevelope 4.4.1 là bản ổn định nhất mà tôi hiện đangdùng.
Chuyển từ VB.NET sang C# thì không khó. Nhưng chuyển ngược lại (C# sang VB.NET) là chuyện khác.
Sẵn ở đây, tôi có thể cho lời khuêyn các bạn muốn học VB.NET:
Muốn vào .NET thì phải dùng .NET Framework. Đã vào nời này thì học luôn C# cho tiện, đừng vướng víu với VB chi nữa. Vì C# là ngôn ngữ dòng họ C cho nên hầu hết các nguyên tắc về cú pháp nó gần gũi với Java. Biết C#, bạn sẽ biết gần hết JavaScript (trừ lệnh function của JavaScript, lệnh này khó bỏ bố, tôi học mấy năm rồi chưa thông).
Trừ phi bạn đã khá giỏi về VB6 rồi thì chuyển sang VB.NET nhanh hơn.
Em cũng đang thử viết một chương trình nhỏ bằng VB.Net 2008 nhưng thấy có nhiều điểm khác VB, VBA quá.
Anh HLMT và các bạn cho dhn46 hỏi: trong VB.Net dhn46 dùng
Tôi không có cấu trả lời trực tiếp cho bạn. Nhưng gián tiếp thì là:
FileOpen là hàm VB.NET đưa ra để "miễn cưỡng" hổ trợ lùi (backward compatible) với VB6.
Nguyên tắc hổ trợ lùi là bạn chỉ dùng khi nào bạn bê nguyên cái module cũ sang nơi mới, chỉnh sửa 1 chút. Nếu viết code mới thì đừng bao giờ, nhấn mạnh: đừng bao giờ, dùng các công cụ hở trợ lùi.
Trong .NET, dùng System.IO.File.Open với class BinaryReader/BinaryWriter hoặc ReadAllBytes (cũng có thể dùng FileStream,...).
Chuyển từ VB.NET sang C# thì không khó. Nhưng chuyển ngược lại (C# sang VB.NET)... thì vô cùng dễ. Tích hợp trong Sharpdevelop công cụ chuyển đổi qua lại giữa các ngôn ngữ C#, VB.NET và cả thêm Ruby, Python, Boo. Không quá 5s để bạn có thể chuyển đổi qua lại..
...
Trong .NET, đừng nói chuyện ADO. Các lớp (class) của .NET làm việc với Data hiệu quả hơn nhiều, điển hình là lớp thuộc nhóm System.IO. Nếu có thì giờ thì học LINQ sẽ thấy nó rất ngon lành. Lưu ý: tôi nói "có thì giờ", nếu không có thì giờ thì đừng học mất công, vì địa bàn dùng không rộng rãi; LINQ là công cụ của Microsoft, không phải tiêu chuẩn như SQL.
...
Cũng cần nói rõ thêm về điểm này: thực ra trong .NET thì công cụ kết nối là ADO.NET. Công cụ này có mô hình lớp bao quát (và trừu tuợng) hơn ADO nhiều.
Chuyển từ VB.NET sang C# thì không khó. Nhưng chuyển ngược lại (C# sang VB.NET)... thì vô cùng dễ. Tích hợp trong Sharpdevelop công cụ chuyển đổi qua lại giữa các ngôn ngữ C#, VB.NET và cả thêm Ruby, Python, Boo. Không quá 5s để bạn có thể chuyển đổi qua lại..
Chắc là vậy. Có lẽ tôi cổ hủ quá rồi.
Đối với tôi 5 s hay 5 hrs để chuyển đổi 1 project không quan trọng. Thậm chí 5 ngày cũng được; 1 project làm việc 6 tháng đổi ngôn ngữ tốn vài ngày chết gì ai?
Vấn đề là sau đó, đọc lại cái code chuyển đổi tôi có hiểu hay không. Tôi cần đại khái các điểm mốc (key areas) để đặt thunks mà unit test chúng, hoặc để nghiệm thu chúng. Không đặt được điểm nghiệm thu, đối với tôi là code bỏ đi.
Cách đây khoảng 2 năm, có người làm công việc chuyển đổi này. Lúc code đưa qua tôi nghiệm thu, tôi chịu thua.
Đối với tôi 5 s hay 5 hrs để chuyển đổi 1 project không quan trọng. Thậm chí 5 ngày cũng được; 1 project làm việc 6 tháng đổi ngôn ngữ tốn vài ngày chết gì ai?
Vấn đề là sau đó, đọc lại cái code chuyển đổi tôi có hiểu hay không. Tôi cần đại khái các điểm mốc (key areas) để đặt thunks mà unit test chúng, hoặc để nghiệm thu chúng. Không đặt được điểm nghiệm thu, đối với tôi là code bỏ đi.
Cách đây khoảng 2 năm, có người làm công việc chuyển đổi này. Lúc code đưa qua tôi nghiệm thu, tôi chịu thua.
Thấy những từ ngữ cao siêu key areas, thunks, unit test của anh là tôi biết anh có lối tư duy cao siêu rồi (Thật xấu hổ là tôi cũng chẳng hiểu nghĩa là gì ). Tôi thì làm việc theo kiểu "điếc không sợ súng". Chẳng cứ phải đúng ngôn ngữ nào mình biết, đến cả những ngôn ngữ chẳng biết, chẳng được học thì khi cần tôi cũng tham khảo. Tôi từng tham khảo Delphi để viết VB6, VB.Nét để viết C#... nếu không tìm được code minh họa bằng đúng ngôn ngữ mong muốn.
Một chương trình có thể viết bằng các ngôn ngữ lập trình khác nhau nhưng vẫn chung nguyên lý, giải thuật, cách dùng các API... Trong các tài liệu về thuật toán người ta cũng minh họa bằng những đoạn code mà xét về hình thức tôi chẳng biết phải Pascal, VB, Delphi, C#, Python... mà tôi xin tạm gọi là ngôn ngữ thuật giải, và ngôn ngữ này cũng chẳng có giáo trình nào đề cập nhưng tại sao người ta vẫn sử dụng để minh họa cho hàng triệu người học lập trình?
Hiểu hay không là do cái hứng thú + tư duy vận động của chúng ta (google, tự điển, giấy nháp...), chứ chẳng thể nào đòi hỏi nó phải diễn giải bằng đúng ngôn ngữ này hay ngôn ngữ nọ. Không hứng thú + tư duy vận động thì mọi đoạn code dù là VB hay C# cũng là vô nghĩa.
.............................
Tôi không có cấu trả lời trực tiếp cho bạn. Nhưng gián tiếp thì là:
FileOpen là hàm VB.NET đưa ra để "miễn cưỡng" hổ trợ lùi (backward compatible) với VB6.
Nguyên tắc hổ trợ lùi là bạn chỉ dùng khi nào bạn bê nguyên cái module cũ sang nơi mới, chỉnh sửa 1 chút. Nếu viết code mới thì đừng bao giờ, nhấn mạnh: đừng bao giờ, dùng các công cụ hở trợ lùi.
Trong .NET, dùng System.IO.File.Open với class BinaryReader/BinaryWriter hoặc ReadAllBytes (cũng có thể dùng FileStream,...).
Cảm ơn bác VetMiniđã quan tâm câu hỏi của dhn46, sử dụng ReadAllBytes đã giải quyết được thắc mắc của dhn46, nhưng không hiểu sao khi dùng ChrW để dịch mã và nối chúng vào 1 str thì không thể Debug.print hay Msgbox toàn bộ chuỗi được, Str ghi ra file Txt hay trích xuất byte thì đúng là có kết quả mong muốn.
dhn46 xin cảm ơn bác đã trả lời, Trong VB.Net dhn46 muốn đọc File *.Mfd (đính kèm) và sử dụng Code
Mã:
Public Class Form1
Public MFDLink As String
Public ArrMFD 'Mảng Binary file *.Mfd
Const LTitle = 16 'Lenght of Title Mfd
Const LInstrument = 18 'Lenght of Instrument Mfd
Const LMusicName = 32 'Lenght of MusicName Mfd
Const LGenre = 16 'Lenght of Genre Style
Const LKeyWord = 32 'Lenght of Keyword Style
Private Sub Cmd_Open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Open.Click
Dim MPos As Long
Dim Title As String 'Tiêu đề
Dim Instrument As String 'Loại nhạc cụ
Dim MusicName As String 'Tên bản nhạc
Dim Genre As String 'Thể loại
Dim KeyWord As String 'Từ khóa
Dim i As Long
With OpenFileDialog1
.Multiselect = False
.Title = "Select MFD file - DHN"
.Filter = "Yamaha music finder database files (*.mfd)|*.mfd|All files (*.*)|*.*"
.FilterIndex = 1
.FileName = ""
.RestoreDirectory = True
If .ShowDialog = Windows.Forms.DialogResult.OK Then
MFDLink = .FileName
End If
End With
If Len(MFDLink) > 0 Then
ArrMFD = System.IO.File.ReadAllBytes(MFDLink)
End If
'*Chú ý: Phần tử trong mảng luôn bắt đầu từ 0, MPos =0
'Tiêu đề File
For i = MPos To MPos + LTitle - 1
Title = Title & ChrW(ArrMFD(i))
MPos = LTitle
Next
'Loại nhạc cụ
[COLOR=#006400] For i = MPos To MPos + LInstrument - 1[/COLOR]
[COLOR=#006400] Instrument = String.Concat(Instrument, ChrW(ArrMFD(i)))[/COLOR]
[COLOR=#006400] Next[/COLOR]
End Sub
Như bác đã thấy trong khai báo, Title lấy 16 bytes đầu, còn Instrument thì lấy 18 Bytes tiếp theo. Khi Title là 1 chuỗi liên tục dùng toán tử nối chuổi trích ra từ Array ArrMFD thì được, nhưng trích Instrument thì chỉ được đến phần có dấu cách (PSR-S750) còn phần phía sau (V1.03) thì không có hiện trong chuỗi.
Bác và các anh chị có thể cho dhn46 sự chỉ dẫn được không ah? dhn46 muốn tự mình học hỏi qua những lời chỉ hướng của bác và các anh chị.
[COLOR=#0000ff]dim[/COLOR] ArrMFD() [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]Byte[/COLOR]
[COLOR=#0000ff]Dim[/COLOR] MPos [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]Long[/COLOR]
[COLOR=#0000ff]Dim[/COLOR] Title [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR] [COLOR=#008000]'Tiêu đề[/COLOR]
[COLOR=#0000ff]Dim[/COLOR] Instrument [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR] [COLOR=#008000]'Loại nhạc cụ[/COLOR]
[COLOR=#0000ff]Dim[/COLOR] MusicName [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR] [COLOR=#008000]'Tên bản nhạc[/COLOR]
[COLOR=#0000ff]Dim[/COLOR] Genre [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR] [COLOR=#008000]'Thể loại[/COLOR]
[COLOR=#0000ff]Dim[/COLOR] KeyWord [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]String[/COLOR] [COLOR=#008000]'Từ khóa[/COLOR]
[COLOR=#0000ff]Dim[/COLOR] i [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]Long[/COLOR]
[COLOR=#0000ff]Dim[/COLOR] LTitle [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]Integer[/COLOR] = 16
[COLOR=#0000ff]Dim[/COLOR] LInstrument [COLOR=#0000ff]As[/COLOR] [COLOR=#6f002f]Integer[/COLOR] = 14
[COLOR=#008000]' With OpenFileDialog1[/COLOR]
[COLOR=#008000]' .Multiselect = False[/COLOR]
[COLOR=#008000]' .Title = "Select MFD file - DHN"[/COLOR]
[COLOR=#008000]' .Filter = "Yamaha music finder database files (*.mfd)|*.mfd|All files (*.*)|*.*"[/COLOR]
[COLOR=#008000]' .FilterIndex = 1[/COLOR]
[COLOR=#008000]' .FileName = ""[/COLOR]
[COLOR=#008000]' .RestoreDirectory = True[/COLOR]
[COLOR=#008000]' If .ShowDialog = Windows.Forms.DialogResult.OK Then[/COLOR]
[COLOR=#008000]' MFDLink = .FileName[/COLOR]
[COLOR=#008000]' End If[/COLOR]
[COLOR=#008000]' End With[/COLOR]
[COLOR=#008000]'If Len(MFDLink) > 0 Then[/COLOR]
ArrMFD = System.IO.File.ReadAllBytes("D:\MusicFinderPreset.mfd")
[COLOR=#008000]'End If[/COLOR]
[COLOR=#008000]'*Chú ý: Phần tử trong mảng luôn bắt đầu từ 0, MPos =0[/COLOR]
[COLOR=#008000]'Tiêu đề File[/COLOR]
[COLOR=#0000ff]For[/COLOR] i = MPos [COLOR=#0000ff]To[/COLOR] MPos + LTitle - 1
Title = Title & ChrW(ArrMFD(i))
MPos = LTitle
[COLOR=#0000ff]Next[/COLOR]
Debug.Print(Title)
[COLOR=#008000]'Loại nhạc cụ[/COLOR]
[COLOR=#0000ff]For[/COLOR] i = MPos [COLOR=#0000ff]To[/COLOR] MPos + LInstrument - 1
Instrument &= [COLOR=#0000ff]IIf[/COLOR](ArrMFD(i)=0, " ", ChrW(ArrMFD(i)))
Debug.Print ("[" & i & "]" & ArrMFD(i) & " - " & ChrW(ArrMFD(i)))
[COLOR=#0000ff]Next[/COLOR]
Debug.Print (Instrument)
Sau một hồi ngấm nghía cuối cùng tôi cũng tìm ra nguyên nhân ở byte thứ 24 (giá trị là 0 chắc là tương đương với dấu kết thúc chuỗi). Thú thật đây là lần thứ 2 trong đời tôi đụng tới VB.Net nên viết lủng củng lắm.
Tôi sửa đoạn code của bạn thành
------------------
Sau một hồi ngấm nghía cuối cùng tôi cũng tìm ra nguyên nhân ở byte thứ 24 (giá trị là 0 chắc là tương đương với dấu kết thúc chuỗi). Thú thật đây là lần thứ 2 trong đời tôi đụng tới VB.Net nên viết lủng củng lắm.
Thì phát sinh lỗi, khi tôi bỏ As Byte đi thì code chạy tốt => Bạn có thể giải thích giùm tôi được không?
Bạn có thể giaỉ thích tại sao dùng Dim chứ không phải Const? Độ dài này là cố định vậy khi khai báo Dim sẽ hiệu quả hơn Const? ( LInstrument =18 chứ không phải 14 bạn ah, bởi quy định của File là 18 byte)
Tôi cũng đã dùng code bắt lỗi ArrMFD(i)=0 để giải quyết tạm thời, song thực sự thắc mắc tại sao chỉ là toán tử nối chuỗi đơn thuần mà VB.Net không thể nối được 1 chuỗi hoàn chỉnh, khi đưa chuỗi vào Array thì làm gì còn chuỗi để kết thúc? Tôi nghĩ đơn thuần chỉ là nối các phần tử trong mảng lần lượt lại.
Qua bài của bạn học thêm được 1 cấu trúc nữa rất hay String1 &= String2 =>String1String2
Thành thực thì hôm wa là lần thứ 2 tôi đụng tới VB.Net cho nên tôi cũng không rành rẽ về cái vụ á byte này và cũng không biết bạn dùng const như thế nào... Nhưng theo kinh nghiệm của tôi thì nếu bạn cứ cất câu hỏi này trong đầu thì chắc chắn 1 ngày nào đó bạn sẽ tìm được câu trả lời vì cái này thuộc về vấn đề phổ thông.
Tôi cũng đã dùng code bắt lỗi ArrMFD(i)=0 để giải quyết tạm thời, song thực sự thắc mắc tại sao chỉ là toán tử nối chuỗi đơn thuần mà VB.Net không thể nối được 1 chuỗi hoàn chỉnh, khi đưa chuỗi vào Array thì làm gì còn chuỗi để kết thúc? Tôi nghĩ đơn thuần chỉ là nối các phần tử trong mảng lần lượt lại.
Bạn nhập nhằng giữa chuỗi và mảng. Trong C++, chuỗi là 1 mảng byte luôn có byte 0 báo hiệu kết thúc chuỗi còn mảng thì nó không cần dấu hiệu kết thúc và đây có thể là quy ước chung cho các ngôn ngữ khác.
Cấu trúc
Mã:
String1 &= String2 =>String1String2
cũng là 1 lệnh ngẫu hứng mà tôi mới phát hiện hôm qua. Tôi biết VB.Net được phát triển thêm những lệnh vốn trước đây chỉ có ở những ngôn ngữ khác nên tôi cũng thử nghiệm toán tử (&=) tương ứng với toán tử (+=) rất quen thuộc trên C++ và may mắn là trúng. Trong lập trình nếu bạn cứ để tư duy được phóng khoáng thì bạn sẽ tự phát hiện ra được nhiều thứ.
Nếu bạn đang học dotNet căn bản thì có thể tham khảo http://www.dotnetperls.com/vb. Tuy có hình thức quê mùa nhưng tôi thấy đây là một trang rất hay về lập trình dotNet. Ngoài khái niệm, ví dụ minh họa khá ngắn gọn, dotnetperls.com còn cung cấp các ví dụ test hiệu năng so sánh giữa các phương án giải quyết khác nhau nhằm giúp người học chọn ra cách giải quyết tối ưu nhất.
Trong C++, chuỗi là 1 mảng byte luôn có byte 0 báo hiệu kết thúc chuỗi còn mảng thì nó không cần dấu hiệu kết thúc và đây có thể là quy ước chung cho các ngôn ngữ khác.
Trong C++, chuỗi là 1 mảng byte luôn có byte 0 báo hiệu kết thúc chuỗi còn mảng thì nó không cần dấu hiệu kết thúc và đây có thể là quy ước chung cho các ngôn ngữ khác.
Khi bạn làm việc với VB.net hay C#, đừng nghĩ tới C/C++.
Chính Microsoft có khuyến cáo rằng chớ nhìn vào cái ký tự C trong C# mà lầm. Theo cấu trúc thì C# gần với Java hơn là gần với C++. (xem chú thích 1 và 2)
Và đồng thời, vì Microsoft bắt buộc phải cái tiến VB.net để theo kịp C# cho nên kết quả là VB.net có rất nhiều lệnh, kiểu, và toán tử mà VB6 không có.
chú thich 1 (chuỗi): C/C++ là hai ngôn ngữ chuyên (tôi nhấn mạnh từ "chuyên") sử dụng con trỏ để tăng tốc. Nếu bạn không quen hoặc không muốn học con trỏ thì đừng bao giờ xía vào hai cái này.
Mọi ngôn ngữ đều định nghĩa mảng là một vùng dự liệu liên tiếp nhau. Tuy nhiên cách sử dụng vùng này, cũng như cách duyệt mảng tuỳ theo từng ngôn ngữ. Các ngôn ngữ dòng họ C định nghĩa hẳn hoi toán tử [] là toán tử duyệt mảng. Biểu thức a được định nghĩa là biểu thức trả về phần tử cách phần tử đầu tiên của mảng i vị trí; định nghĩa không hề nói nó đứng ở vị trí nào.
Riêng trong C/C++, người ta thường dùng chuỗi bằng cách chỉ định một vùng nhớ và đưa con trỏ vào đầu vùng nhớ. Vì vùng nhớ có độ dài cố định cho nên trong C có quy ước rằng ký tự có trị là 0 sẽ là ký tự kết thúc chuỗi. Lưu ý rằng quy ước này chỉ áp dụng cho các hàm (đặc biệt là hàm thư viện) làm việc với chuỗi. Ví dụ bạn có một chuỗi định là nằm trong vùng nhớ dài 100 bytes; nhưng chuỗi của bạn chỉ dùng đến 30 bytes; khi ấy bytes thứ 31 sẽ chứa trị 0. Tất cả các hàm trong C đọc mảng này sẽ dừng lại khi đọc tới byte 31 này. Nhưng không có nghĩ là byte 32 trở đi sẽ không có gì hết. Code của bạn có toàn quyền đọc cho tới byte thứ 100. Tức là lúc bạn viết code, phải tự biết mà dừng ở 30 khi thấy byte 31 là 0.
C++, vì là ngôn ngữ hướng đối tượng, cho nên trong thư viện của nó có đặt thêm một lớp string để làm việc hiệu quả hơn với chuỗi. Vì vậy, khi làm việc với C++, người ta phải phân biệt 2 loại string: C string và lớp string.
Trong C# và VB.net, string là một lớp phức tạp. Có những toán tử, hàm và thuộc tính riêng của nó. Vì vậy trị 0 không có nghĩa là cuối chuỗi.
chú thích 2 (một số cấu trúc): C/C++ vì phải làm việc trong điều kiện hiệu quả tối đa cho nên có những cấu trức phải được hiểu khác với những ngôn ngữ khác. Ví dụ Case trong C/C++ có tính chất "tuột", tức là nó sẽ đi xuyên từ case này sang case kia nếu bạn không "break" nó. Những ngôn ngữ khác không như vậy.
Xin cảm ơn những kiến thức mà các bác đã chia sẻ, quả thực đọc cái Chr(0) cho cái kết thúc chuỗi này dhn46 lại thấy hiểu hơn cấu trúc File Mfd mà dhn46 đang muốn tìm hiểu.
Hiện nay dhn46 đang mắc khó khăn trong việc ghi ký tự vào file text sử dụng VB.Net:
Khi khi ChrW(0) vào file text thì với Excel sẽ cho ra 1 ký tự trắng (không phải khoảng trắng) tương ứng với mã tự ChrW(0) nhưng VB.Net thì lại cho ra ký tự "00" (dhn46 sử dụng .Write(chrW(0))
Tương tự như vậy với mã tự 128 thì Excel ghi ra kết quả là " €" nhưng VB.Net cho ra kết quả "."
=> Vậy tại sao có sự khác biệt đó? Và cách khắc phục để VB.Net cho ra kết quả tương đồng Excel hay VB6 ghi ra *.Txt là như thế nào
Kiểu dữ liệu, đặc biệt cách làm việc với kiểu dữ liệu string trong ngôn ngữ C là cần thiết để các bạn có thể ứng dụng các hàm Windows API trong các ngôn ngữ lập trình. Bạn có thể search hàm API GetComputerName + VBA, VB6 sẽ thấy.