[Gambas-user] How to manage filenames whit invalid characters in gambas.

Martin mbelmonte at belmotek.net
Thu Feb 16 09:32:04 CET 2023


El 15/2/23 a las 23:37, Bruce Steers escribió:
> They need fixing. By you. First.

ok, so far I have solved it like this:

Static Public Function Flat3(s As String) As String

   Dim ab1 As Byte[] = ["33", "48", "49", "50", "51", "52", "53", "54", 
"55", "56", "57", "65", "66", "67", "68", "69", "70", "71", "72", "73", 
"74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", 
"86", "87", "88", "89", "90", "97", "98", "99", "100", "101", "102", 
"103", "104", "105", "106", "107", "108", "109", "110", "111", "112", 
"113", "114", "115", "116", "117", "118", "119", "120", "121", "122", 
"192", "193", "194", "195", "196", "197", "198", "199", "200", "201", 
"202", "203", "204", "205", "206", "207", "208", "209", "210", "211", 
"212", "213", "214", "216", "217", "218", "219", "220", "221", "222", 
"223", "224", "225", "226", "227", "228", "229", "230", "231", "232", 
"233", "234", "235", "236", "237", "238", "239", "240", "241", "242", 
"243", "244", "245", "246", "248", "249", "250", "251", "252", "253", 
"254", "255"]

   Dim ab2 As Byte[] = ["95", "48", "49", "50", "51", "52", "53", "54", 
"55", "56", "57", "65", "66", "67", "68", "69", "70", "71", "72", "73", 
"74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", 
"86", "87", "88", "89", "90", "97", "98", "99", "100", "101", "102", 
"103", "104", "105", "106", "107", "108", "109", "110", "111", "112", 
"113", "114", "115", "116", "117", "118", "119", "120", "121", "122", 
"65", "65", "65", "65", "65", "65", "65", "67", "69", "69", "69", "69", 
"73", "73", "73", "73", "68", "78", "79", "79", "79", "79", "79", "79", 
"85", "85", "85", "85", "89", "112", "98", "97", "97", "97", "97", "97", 
"97", "97", "99", "101", "101", "101", "101", "105", "105", "105", 
"105", "100", "110", "111", "111", "111", "111", "111", "111", "117", 
"117", "117", "117", "121", "112", "121"]

   Dim ab As New Byte[]
   Dim b As Byte
   Dim o As String
   Dim i As Integer

   ab = Byte[].FromString(s)

   If ab.Count > 0 Then
     For Each b In ab
       i = ab1.Find(b)
       If i > -1 Then
         o &= Chr(ab2[i])
       Else
         o &= "_"
       Endif
     Next
   Endif

   Return o

End

But I am not sure if it is applicable in all cases, e.g. in text strings 
containing at least one 2-byte character.

Martin.


More information about the User mailing list