ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
26 visibility
موضوع: آفیس توسط:
اسکات به دنبال راهی برای به دست آوردن "شمارش فرکانس" همه شخصیت های یک سند است. او می‌خواهد بداند هر کاراکتر، کدهای اسکی 9 تا 255 چند بار رخ می‌دهد. می توان از Find و Replace برای تعیین تعداد کاراکترهای فردی استفاده کرد (به سادگی یک کاراکتر مورد نظر را جستجو کنید و سپس آن را با خودش جایگزین کنید)، اما اگر نیاز به انجام آن برای 247 بود، چنین رویکردی در بهترین حالت خسته کننده خواهد بود. کد کاراکترهای مختلف برای به دست آوردن اطلاعات مورد نظر.
چنین کاری باید با یک ماکرو انجام شود، اما راه های مختلفی برای نزدیک شدن به آن وجود دارد. یک راه این است که یک ماکرو بنویسید که از هر یک از اعضای مجموعه شخصیت ها عبور کند، هر کدام را بررسی کند و آن کاراکتر را به یکی از تعدادی شمارنده اختصاص دهد.
Sub CountChars1() Dim iCount(0 To 255) As Integer Dim i As Integer Dim vCharacter As Variant Dim sTemp As StringInitialize the array For i = 0 To 255 iCount(i) = 0 Next iFill the array For Each oCharacter In ActiveDocument.Characters i = Asc(oCharacter) iCount(i) = iCount(i) + 1 NextAdd document for results Documents.Add Selection.TypeText Text:="ASCII Character Count" & vbCrLfOnly output codes 9 through 255 For i = 9 To 255 sTemp = Chr(i) If i < 32 Then sTemp = Trim(Str(i)) sTemp = sTemp & Chr(9) & Trim(Str(iCount(i))) sTemp = sTemp & vbCrLf Selection.TypeText Text:=sTemp Next i End Sub
ماکرو از آرایه iCount برای جمع آوری تعداد کدهای هر کاراکتر استفاده می کند و سپس یک سند جدید برای خروجی نتایج ایجاد می شود. (سند نتایج را می توان به هر شکل دلخواه قالب بندی کرد.)
این رویکرد می تواند برای اسناد نسبتاً کوتاه، تا چند صفحه، به خوبی کار کند. وقتی سند طولانی تر می شود، ماکرو کندتر می شود. چرا؟ زیرا استفاده از مجموعه شخصیت ها بنا به دلایلی زمان زیادی می برد. اگر ماکرو برای اسناد شما خیلی کند اجرا می شود، می خواهید کمی آن را تغییر دهید تا فقط با رشته ها کار کند.
Sub CountChars2() Dim iCount(0 To 255) As Long Dim i As Long Dim j as integer Dim lCharCount As Long Dim sDoc As String Dim sTemp As StringInitialize the array For i = 0 To 255 iCount(i) = 0 Next iAssign document to a huge string lCharCount = ActiveDocument.Characters.Count sDoc = ActiveDocument.Range(0, lCharCount)Fill the array For i = 1 to Len(sDoc) j = Asc(Mid(sDoc, i, 1)) iCount(j) = iCount(j) + 1 NextAdd document for results Documents.Add Selection.TypeText Text:="ASCII Character Count" & vbCrLfOnly output codes 9 through 255 For i = 9 To 255 sTemp = Chr(i) If i < 32 Then sTemp = Trim(Str(i)) sTemp = sTemp & Chr(9) & Trim(Str(iCount(i))) sTemp = sTemp & vbCrLf Selection.TypeText Text:=sTemp Next i End Sub
توجه داشته باشید که این نسخه از ماکرو کل سند را در یک رشته به نام sDoc قرار می دهد. سپس این رشته می تواند به سرعت توسط ماکرو پردازش شود. (بررسی یک سند 635 صفحه ای فقط 30 ثانیه طول کشید تا در سیستم من پردازش شود.) از آنجایی که این نسخه برای کار با اسناد طولانی تر ساخته شده است، همچنین توجه داشته باشید که برخی از انواع متغیرها تغییر کرده اند تا احتمال تعداد بیشتر را منعکس کنند.
اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوال مشابهی یافت نشد

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما

23.2k سوال

8.5k پاسخ

613 دیدگاه

10.8k کاربر

157 نفر آنلاین
1 عضو و 156 مهمان در سایت حاضرند
اعضای حاضر در سایت
بازدید امروز: 10044
بازدید دیروز: 13001
بازدید کل: 19464339
...