Почему NSString и NSLog, кажется, обрабатывают %C и %lc (и %S и %ls) по-другому?

Так как есть множество разных строк, которые можно скрыть и показать, я сделал первый пример, который вы можете использовать, чтобы сделать все остальное:

Dim wb As Workbook, ws As Worksheet, SheetNames
Application.DisplayAlerts = False 'Prevents general pop-ups
Application.Calculation = xlManual 'Formulas are not calculated
Application.ScreenUpdating = False 'What the user see's on screen will not change

If Intersect(Target, Range("D10")) Is Nothing Then Exit Sub

Set wb = ThisWorkbook
SheetNames = Array("Weekly Report - New", "Cumulative Report - New")


StrValue = Target.Value
Select Case StrValue
    'Hides all major city information so just the titles are shown.
    Case vbNullString
        For i = 0 To 1
            Set ws = wb.Sheets(SheetNames(i))
            With ws
                .Unprotect
                Union(.Rows("54:63"), .Rows("68:77"), .Rows("82:91"), .Rows("96:105"), .Rows("23:47")). _
                    EntireRow.Hidden = True
                .Rows("18:31").EntireRow.Hidden = False
            End With
        Next i

    'All the other cases

End Select

То, что я сделал, было цикл для каждого нужного вам листа работать (при условии, что оба имеют одинаковые данные) и использовать то, что urdearboy сказал о объединении для большей читабельности и ускорения процесса.

Надеюсь, это направит вас в правильном направлении. Если вам нужна помощь, просто спросите.

5
задан Evan DiBiase 20 March 2009 в 21:02
поделиться

1 ответ

На Mac OS X, <machine/_types.h> определяет wchar_t как int, таким образом, это - четыре байта (32 бита) на всей поддерживаемой в настоящее время архитектуре.

Как Вы отмечаете, printf(3) страница справочника определяет %S как эквивалентный %ls, который берет указатель на некоторых wchar_t символы (wchar_t *).

Документация Какао, которую Вы связали с (и ее эквивалент CF), однако, действительно определяет %S отдельно:

  • %S: Завершенный пустым указателем массив 16-разрядных символов Unicode

Акцент добавляется. Кроме того, то же идет для %C.

Так, это не ошибка. CF и Какао интерпретируют %S и %C по-другому по сравнению с как printf и его кузены интерпретируют их. CF и Какао рассматривают символ (символы) как UTF-16, тогда как printf (по-видимому), рассматривает их как UTF-32.

Интерпретация CF/Cocoa более полезна при работе с Core Services, поскольку некоторые API (такие как Файловый менеджер) вручат Вам текст как массив UniChars, не CFString; пока Вы пустой оконечный, которые выстраивают, можно использовать его с %S распечатать строку.

6
ответ дан 14 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: