Rosetta Code/Rank languages by popularity: Difference between revisions
Content added Content deleted
(→{{header|C sharp|C#}}: Handle more that 500 languages and more than 999 tasks) |
(Added Visual Basic .NET) |
||
Line 6,361: | Line 6,361: | ||
0 Examples - WML |
0 Examples - WML |
||
0 Examples - VAX Assembly</pre> |
0 Examples - VAX Assembly</pre> |
||
=={{header|Visual Basic .NET}}== |
|||
Uses Web scrapping to get the information from the Languages category page - as this now shows the number of pages in each category with the non-task pages separated, there is no need to access other pages.<br> |
|||
It may be necessary to set the Security Protocol to Tls12 at the start of the Main method in order to run this - see the "Problem running the C# entry" section on the [[Talk:Rosetta Code/Count examples]] page. |
|||
<syntaxhighlight lang="vbnet"> |
|||
Imports System.Collections |
|||
Imports System.Collections.Generic |
|||
Imports System.Net |
|||
Imports System.Text.RegularExpressions |
|||
Module RankLanguagesByPopularity |
|||
Private Class LanguageStat |
|||
Public name As String |
|||
Public count As Integer |
|||
Public Sub New(name As String, count As Integer) |
|||
Me.name = name |
|||
Me.count = count |
|||
End Sub |
|||
End Class |
|||
Private Function CompareLanguages(x As LanguageStat, y As languageStat) As Integer |
|||
Dim result As Integer = 0 |
|||
If x IsNot Nothing Or y IsNot Nothing Then |
|||
If x Is Nothing Then |
|||
result = -1 |
|||
ElseIf y Is Nothing |
|||
result = 1 |
|||
Else |
|||
result = - x.count.CompareTo(y.count) ' Sort descending count |
|||
If result = 0 Then |
|||
result = x.name.CompareTo(y.name) ' Sort ascending name |
|||
End If |
|||
End If |
|||
End If |
|||
Return result |
|||
End Function |
|||
Public Sub Main(ByVal args As String()) |
|||
Dim languages As New List(Of LanguageStat) |
|||
Dim basePage As String = "https://rosettacode.org/wiki/Category:Programming_Languages" |
|||
Dim nextPage As String = basePage |
|||
Dim nextPageEx = New RegEx("<a href=""/wiki/Category:Programming_Languages([?]subcatfrom=[^""]*)""") |
|||
Dim languageStatEx = _ |
|||
New Regex(">([^<]+?)</a>[^<]*<span title=""Contains *[0-9,.]* *[a-z]*, *([0-9,.]*) *page") |
|||
Do While nextPage <> "" |
|||
Dim wc As New WebClient() |
|||
Dim page As String = wc.DownloadString(nextPage) |
|||
nextPage = "" |
|||
For Each link In nextPageEx.Matches(page) |
|||
nextPage = basePage & link.Groups(1).Value |
|||
Next link |
|||
For Each language In languageStatEx.Matches(page) |
|||
Dim lCount As Integer = 0 |
|||
Dim lName As String = language.Groups(1).Value |
|||
Dim countText As String = language.Groups(2).Value.Replace(",", "").Replace(".", "") |
|||
If Not Integer.TryParse(countText, lCount) |
|||
Console.Out.WriteLine(lName & "Invalid page count: <<" & countText & ">>") |
|||
Else |
|||
languages.Add(New LanguageStat(lName, lCount)) |
|||
End If |
|||
Next language |
|||
Loop |
|||
languages.Sort(AddressOf CompareLanguages) |
|||
Dim prevCount As Integer = -1 |
|||
Dim prevPosition As Integer = -1 |
|||
Dim position As Integer = 0 |
|||
For Each stat As LanguageStat In languages |
|||
position += 1 |
|||
If stat.count <> prevCount Then |
|||
prevPosition = position |
|||
prevCount = stat.Count |
|||
End If |
|||
Console.Out.WriteLine(prevPosition.ToString.PadLeft(4) & ": " & |
|||
stat.count.ToString.PadLeft(4) & " " & stat.name) |
|||
Next stat |
|||
End Sub |
|||
End Module |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
Sample output as at 11th September 2023 |
|||
<pre> |
|||
1: 1652 Phix |
|||
1: 1652 Wren |
|||
3: 1614 Julia |
|||
4: 1595 Raku |
|||
5: 1576 Nim |
|||
6: 1546 Go |
|||
7: 1531 Perl |
|||
8: 1470 Python |
|||
9: 1375 J |
|||
10: 1285 C |
|||
. . . |
|||
</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |