קידוד עברית דוס ל windows vba
-
שלום לכולם, כידוע חברות האשראי עובדות על סטרינג בקידוד של דוס, יש תשובה אחת שמתקבלת כטקסט זהו שם הכרטיס.
למשל:
(„†‰…) Cal = Cal )ויזה(
ˆ—˜‰‰ƒ ˆ˜‹€˜‰ = ישראכרט דיירקט
וכן הלאה.
האם יש קוד פנימי ב vba בלי רפרנסים ובלי כאב ראש, שיכול להמיר את הנתונים.פורסם במקור בפורום CODE613 ב07/01/2014 16:10 (+02:00)
-
זה נראה בסה''כ כמה עשרות תוים להמיר מקידוד אחד לשני, אז תעשה פונקציה שיש בה שני מערכים זה כנגד זה במערך אחד סידרה של אותיות בקידוד רגיל ובמערך שני במקביל סידרה של אותם האותיות בקידוד DOC וכך תמיר מאחד לשני.
פורסם במקור בפורום CODE613 ב07/01/2014 16:14 (+02:00)
-
טוב את זה ברור שניסיתי, לא חשבתי לכתוב אפילו.
המהדר לא ממש "מבין" את הקידוד כשאתה נותן לו ככה סטרינגים מג'וברשים.
צריך פונקציה ברמה של ביטים שתדע לעשות את העבודה. יש כמה דברים כאלו, רק לא מצאתי ספציפית. מגיקוד ודאי יודע לעשות את זה.פורסם במקור בפורום CODE613 ב07/01/2014 16:17 (+02:00)
-
אם המהדר לא מבין את הגיבריש אתה יכול להשתמש בפונקציות CHR או CHRW ולעשות מזה מערך.
כדי לבדוק מה המספר של כל תו אתה יכול לרשום את כולם בוורד ועל כל אחד להפעיל את הפונקציה ASC שתאמר לך מה המספר של אותו תו, אח''כ תרשום את המספר שקיבלת כך :CHRW(המספר שהתקבל)
פורסם במקור בפורום CODE613 ב07/01/2014 16:20 (+02:00)
-
ספציפית לגבי האשראי אני זוכר שדיברתי איתם בעבר ע"ז, והם נתנו לי רשימה של כל הכרטיסים לפי הID שמתקבל באחת הפוזיציות. (זה היה הפיתרון שלהם)
בכל מקרה:
'API שהופך קידוד ווינדוס לדוס - מתאים להמרה בשביל הקובץ מסב Private Declare Function CharToOemA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long ' API הפוך. ממיר לווינדוס Private Declare Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long Public Function test() Dim t As String t = "ˆ—˜‰‰ƒ ˆ˜‹€˜™‰ " OemToCharA t, t 'צריך להשתמש בStrReverse כדי להפוך את הסטרינג MsgBox StrReverse(t) End Function
פורסם במקור בפורום CODE613 ב07/01/2014 16:43 (+02:00)
-
זה קוד עתיק שכתבתי לפני 4 שנים בערך.
'עברית זה קוד 1264 Function ToUnicode(ByVal Str As String, ByVal CodeNumber As Int16) As String Dim s As String = "" For a As Integer = 1 To Len(Str) Dim b As Integer = AscW(Mid(Str, a, 1)) If b >= &H80 Then 'And b <= &HFF s &= ChrW(b + CodeNumber) Else s &= ChrW(b) End If Next Return s End Function
הרעיון זה להגדיל את הקוד באופן יחסי.
פורסם במקור בפורום CODE613 ב07/01/2014 17:21 (+02:00)
-
הקוד של מגיקוד מוליך אותי מגי'בריש לג'יבריש ב vba כמובן
וזה מה שהוא נותן: ߌ┩▜ߌ☒┠
עכשיו גם האתר של ג'יבריש לא יודע איך לאכול את זה.הקוד הזה:
Public Function UnicodeEncode(Str) As String If IsNull(Str) Then Exit Function Dim i, a For i = 1 To Len(Str) a = AscW(Mid(Str, i, 1)) If a > -1 And a < 127 Then UnicodeEncode = UnicodeEncode & "%" & String(2 - Len(Hex(a)), "0") & Hex(a) ElseIf a > -1 Or a < 65535 Then UnicodeEncode = UnicodeEncode & "%u" & String(4 - Len(Hex(a)), "0") & Hex(a) End If Next End Function
מחזיר את זה:
%20%20%20%20%20%20%20%20%u02C6%u02DC%u2039%u20AC%u02DC%u2122%u2030שזה כמדומני משהו בסיגנון של json אלא אם כן אני מדבר שטויות.
את הקוד של קליק וואן עוד לא ניסתי, יש לי קושי להשתמש ברפרנסים ופוקציות וינדווס. גם בגלל החילוק בין 32 ל 64 ביט.
פורסם במקור בפורום CODE613 ב07/01/2014 18:12 (+02:00)
-
את הקוד של קליק וואן עוד לא ניסתי, יש לי קושי להשתמש ברפרנסים ופוקציות וינדווס. גם בגלל החילוק בין 32 ל 64 ביט.
זה עובד גם על 64 ביט ללא רפרנסים.(לא אקסס 64 ביט, אלא ווינדוס 64 ביט - באקסס אם אתה מקמפל ל64 ביט אתה יכול להשתמש בזה רק ב64 ביט, ואפילו סגירה באקסס 32 ביט לא תיפתח כמו שצריך באקסס 64 ביט - לזה אתה מתכוון?).
את הקוד הנ"ל אני כתבתי על ווינדוס 64 ביט.פורסם במקור בפורום CODE613 ב07/01/2014 22:06 (+02:00)
-
את הקוד של קליק וואן עוד לא ניסתי, יש לי קושי להשתמש ברפרנסים ופוקציות וינדווס. גם בגלל החילוק בין 32 ל 64 ביט.
בנוסף, אם באמת אתה סוגר את האקסס גם ל64 ביט (או לא סוגר אותו בכלל :lol: :lol: :lol: ), יש לך דרך להשתמש בפונקציות API, אתה צריך רק להוסיף
הגדרה בהצהרה שזו פונקצייה בטוחה.
להגדרה קוראים: PtrSafe
ולפיכך ההצהרה תהיה:Private Declare PtrSafe Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
כדי שלא תצטרך לנהל גירסאות 32 ו64 ביט, תוכל להשתמש בהצהרה בתחביר הבא:
#If VBA7 Then Private Declare PtrSafe Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long #Else Private Declare Function OemToCharA Lib "user32.dll" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long #End If
כמובן שההצהרה יושבת בראש המודול. הסולמית בהתחלה מאפשרת לIF לרוץ אפילו שהוא לא בתוך פונקצייה.
מידע נוסף לגבי פונקציות API בסביבת אופי 64 ביט תוכל למצוא כאןפורסם במקור בפורום CODE613 ב07/01/2014 22:32 (+02:00)
-
ר' קליק, לא תאמין מה קרה, זרח מפרחוני כל האשכול הזה (כנראה שהלקוח שכח מזה, אחרת איך אפשר לשכוח כשמקבלים טלפון בהול כל בוקר "יש לי ג'יבריש בכרטיסי אשראי!!!!"). כיום נתקלתי שוב בשאלה, כדרכי תישאלתי את גוגל באנגלית (כי מי מצפה שמישהו יכתוב תשובות בעברית) וגוגל הפנה אותי לא פחות ולא יותר, לכאן!!
אז התשובה שלך אכן פתרה את הבעיה ויישר כוח.פורסם במקור בפורום CODE613 ב04/11/2014 13:47 (+02:00)