آژانس هواپیمایی
pop up

تبديل dbf از dos به windows

شروع موضوع توسط aliof ‏31 می 2004 در انجمن برنامه نویسی

  1. aliof

    aliof کاربر تازه وارد

    تاریخ عضویت:
    ‏20 می 2004
    نوشته ها:
    31
    تشکر شده:
    0
    با سلام به تمامي دوستان وسروران گرامي
    مشكل من اينه كه يه فايل dbf دارم كه توش به زبان فارسي متن نوشته شده با فارسي ساز vegaf يا sepand
    ( در dos ) چه طوري ميتونم اونو تبديل كتم به كد پيچ ويندوز و اونو تو ويندوز بخونم اگه كسي راجب اين موضوع چيزي ميدونه لطف كنه به ادرس من ايميل بزنه
    با تشگر
    Email:dr_mehdipor@yahoo.com or alialiof@yahoo.com
     
  2. karagah

    karagah کاربر تازه وارد

    تاریخ عضویت:
    ‏22 می 2004
    نوشته ها:
    63
    تشکر شده:
    0
    دوست عزيز
    در ويندوز با چه نرم افزاري ميخواهيد اون فايل رو بخونيد؟ اگر فايل تبديل به unicode بشه مشکل شما حل میشه یا حتما می خواهید کد پیج arabic باشه؟
     
  3. aliof

    aliof کاربر تازه وارد

    تاریخ عضویت:
    ‏20 می 2004
    نوشته ها:
    31
    تشکر شده:
    0
    سلام بر دوست عزيز كار آگاه
    اول از همه تشكر ميكنم بابت نامه ات واينكه زحمت كشيدي جواب من رو دادي
    مسئله اينه كه من يه فايل dbf تو dos دارم كه توش فيلد نام و نام خانوادگيش فارسي نوشته شده البته فارسي ساز در محيط dos من sepand يا vegaf هست حالا ميخوام بتونم اين فايل رو بيارم تو ويندوز و با اكسل ببينم
    ويندوز من هم ميلينيوم با پارسا 2001 هست البنه ويندوز 98 با پارسا 99 هم همين طور
    براي من فرقي نميكنه خروجي بر اساس يوني كد باشه يا بر اساس عربي چون با خود پارسا ميشه اينا رو به تبديل كرد
    با تشكر
     
  4. amir

    amir مدیران قدیمی

    تاریخ عضویت:
    ‏15 دسامبر 2002
    نوشته ها:
    893
    تشکر شده:
    4
    بچه ها من يه پيشنهادي دارم !
    اگه مي شه اين چيز ها رو ( همين راهنمايي در مورد تبديل كدينگ واينا ) تو همين فروم جواب بدين و براي هم ميل نزنين !!!!!
    اينجوري همه كساني كه ميان مي تونند راه حل رو ببينند و دفعه بعد ديگه كسي سر اين موضوع گير نمي كنه !
    ببخشيد هم فضولي كردم !! اما خداييش حيفه همه نخونند اين چيز ها رو.
     
  5. karagah

    karagah کاربر تازه وارد

    تاریخ عضویت:
    ‏22 می 2004
    نوشته ها:
    63
    تشکر شده:
    0
    :) شما درست مي گين. چون براي پست 2 جوابي نيومد من حدس زدم دوستمون aliof منتظر میل هست .من هم همون پست 2 رو ميل كردم و پيشنهاد کردم که گفتگو رو تو فروم ادامه بدیم.
     
  6. karagah

    karagah کاربر تازه وارد

    تاریخ عضویت:
    ‏22 می 2004
    نوشته ها:
    63
    تشکر شده:
    0
    دوست عزیز
    روش زیر با فارسی سازهای سازگار با sepand وfoxpro 2.6 و
    excel XP یا excel 2000 در ویندور های xp و 2003
    آزمایش شده و درست جواب می دهد:

    برای مشاهده فایل dbf در excel باید این کارها را انجام دهید:
    1- در محیط Foxpro برای dos مثلا (Foxpro 2.6) ، فایل DBF را باز کنید:
    در پنجره command تایپ کنید:
    کد:
    use ?
    بعد فایل dbf را پیدا کنید و باز کنید.

    2- در پنجره command تایپ کنید:
    کد:
    SET PRINTER TO "C:\TEMP.TXT"
    LIST TO PRINTER
    حالا فایل DBF به فرمت TEXT تبدیل و در فایل C:\TEMP.TXT ذخیره شده.

    3-در EXCEL از منوی فایل ، open را انتخاب کنید
    - در قسمت files of type گزینه textfiles را انتخاب کنید. بعد c:\temp.txt را
    پیدا کنید و آنرا open کنید. حالا text import wizard باز می شود در اولین مرحله آن:
    - در قسمت original data type گزینه fixed width
    - در قسمت file origin گزینه windows(ansi)
    - در قسمت start import at row هم 1
    را انتخاب کنید. بعد هم finish را کلیک کنید.

    4- فایل را با فرمت microsoft excel workbook ذخیره کنید.

    5-visual basic editor را اجرا کنید(از منوی tools)
    - در قسمت project روی ThisWorkBook دابل کلیک کنید.
    - صفحه ای برای کد نویسی باز میشود، ماکرو زیر را در آن paste کنید.
    کد:
    Sub convert()
        
        'Simple VEGAF/SAHER and compatibles Text Converter
        'for ms excel
        'Code and mapping by :
        'Karagah (pt_karagah at yahoo dot com)
        'you may use it freely as long as this notice
        'remains intact. ENjoy Oldies! :)
         
        
        Dim map(255) As Integer
        Dim myString As String
        Dim myChar As String * 1
        For i = 0 To 255
            map(i) = i
        Next
        map(128) = 48: map(129) = 49: map(130) = 50: map(131) = 51:
        map(132) = 52: map(133) = 53: map(134) = 54: map(135) = 55:
        map(136) = 56: map(137) = 57: map(138) = 161: map(139) = 45:
        map(140) = 191: map(141) = 194: map(142) = 198: map(143) = 193:
        map(144) = 199: map(145) = 199: map(146) = 200: map(147) = 200:
        map(148) = 129: map(149) = 129: map(150) = 202: map(151) = 202:
        map(152) = 203: map(153) = 203: map(154) = 204: map(155) = 204:
        map(156) = 141: map(157) = 141: map(158) = 205: map(159) = 205:
        map(160) = 206: map(161) = 206: map(162) = 207: map(163) = 208:
        map(164) = 209: map(165) = 210: map(166) = 142: map(167) = 211:
        map(168) = 211: map(169) = 212: map(170) = 212: map(171) = 213:
        map(172) = 213: map(173) = 214: map(174) = 214: map(175) = 216:
        map(224) = 217: map(225) = 218: map(226) = 218: map(227) = 218:
        map(228) = 218: map(229) = 219: map(230) = 219: map(231) = 219:
        map(232) = 219: map(233) = 221: map(234) = 221: map(235) = 222:
        map(236) = 222: map(237) = 223: map(238) = 223: map(239) = 144:
        map(240) = 144: map(241) = 225: map(243) = 225: map(244) = 227:
        map(245) = 227: map(246) = 228: map(247) = 228: map(248) = 230:
        map(249) = 229: map(250) = 229: map(251) = 229: map(252) = 237:
        map(253) = 237: map(254) = 237:
        
        For Each c In Selection
            If c.Value <> "" Then
               myString = c.Value
               temp = ""
                For i = Len(myString) To 1 Step -1
                    myChar = Chr(map(Asc(Mid(myString, i, 1))))
                    temp = temp + myChar
                Next
                c.FormulaR1C1 = temp
            End If
        Next
    End Sub
    
     
    - به worksheet برگردید و ستون هایی را که می خواهید به فارسی تبدیل شوند
    انتخاب کنید و ماکروی convert را اجرا کنید. (از منوی tools->macro->macros)

    ** موقع انتخاب دقت کنید!این ماکرو فقط متونی که کاملا فارسی هستند را
    درست تبدیل می کند. متن انگلیسی و اعداد را برعکس می کند.

    ** قبل از تبدیل فایل های دیگر با این روش باید فایل temp.txt را پاک کنید
    چون foxpro هر بار آخر فایل اطلاعات را اضافه می کند.
     
  7. boxilink
  8. Mehdi Hamedali

    Mehdi Hamedali کاربر تازه وارد

    تاریخ عضویت:
    ‏16 نوامبر 2003
    نوشته ها:
    267
    تشکر شده:
    0
    سلام به همه دوستان
    دوست عزيز
    راه جالبيه و فكر مي كنم كه از اين كوتاه تر هم نشه ولي اطمينان داري كه ميشه
    يك نصيحت از يك دوست هميشه خودت اول يوزر استفاده كننده باش بعد برنامه رو به كسي ديگه نشون بده تا استفاده كنه البته ببخشيد كه اين حرف رو ميزنم
    البته امير آقاي عزيز نگران نباشه هيچ كدم از بچه هاي اين جا اين جوري نيستن و اگه هستند متعلق به اين جا نيستند
    قربان شما
    MHa
     
  9. karagah

    karagah کاربر تازه وارد

    تاریخ عضویت:
    ‏22 می 2004
    نوشته ها:
    63
    تشکر شده:
    0
    خيلي از نصيحت شما متشكرم :) ولي همونطور كه در پست قبلی نوشتم این روش با دو سیستم مختلف آزمایش شده و درست کار می کند.
     
  10. behzad65

    behzad65 کاربر تازه وارد

    تاریخ عضویت:
    ‏3 ژوئن 2004
    نوشته ها:
    65
    تشکر شده:
    0
    محل سکونت:
    Tehran
    دوستان حجم فایل من خیلی هستش
    حدود 1.5GB
    مشکلی برام پیش نمیاد اگه این کار را انجام بدم؟
    یعنی Excel میتونه یه text با حجم 1.5GB را باز کنه؟

    حالا یه سوال دیگه
    این ماکرو که کار تبدیل را انجام میده تمامی اعداد را برعکس میکنه
    ماکروی دیگری وجود داره که دوباره اعداد را به حالت اصلی تبدیل کنه؟
     
  11. karagah

    karagah کاربر تازه وارد

    تاریخ عضویت:
    ‏22 می 2004
    نوشته ها:
    63
    تشکر شده:
    0
    دوست عزيز
    1- حتما مي دونيد كه اكسل يه برنامه بانك اطلاعاتي نيست.و براي کارهای بزرگ نمي شه ازش استفاده كرد. چون تعداد سطر ها وستون ها در اكسل محدوده. در هر شيت حداكثر 256 ستون و 65536 سطر ميتونيد داشته باشيد . ضمنا براي فايل هاي بزرگ سرعت اکسل کم است و برای انجام محاسبات و گزارش گیری مناسب نیست.

    اگر تعداد رکورد ها یا فیلدهای dbf شما بیش از حد توان اکسل است باید فایل را چند قسمت کنید و هر قسمت را به اکسل بیاورید و ماکرو را اجرا کنید بعد تمام قسمت ها در یک برنامه دیتابیس واقعی کنار هم قرار دهید.
    راه دیگر قرار دادن هر قسمت از DBF در یک شیت جداگانه است ولی ممكن ساختار DBF طوری باشد که نتونید از این روش استفاده کنید.

    2- این ماکرو فقط روی سلول هایی که انتخاب شده اند عمل می کند، پس کافی است ستون های اعداد را انتخاب نکنید.
     
  12. behzad65

    behzad65 کاربر تازه وارد

    تاریخ عضویت:
    ‏3 ژوئن 2004
    نوشته ها:
    65
    تشکر شده:
    0
    محل سکونت:
    Tehran
    خیلی ممنون
    اتفاقا من فقط میخوام فیلد های عددی را تبدیل کنم
    ولی راه حلش را گیر آوردم
    با دوباره اجرا کردن ماکرو همه چیز درست میشه.
     
  13. desertfox

    desertfox کاربر تازه وارد

    تاریخ عضویت:
    ‏2 دسامبر 2005
    نوشته ها:
    1
    تشکر شده:
    0
    با تشکر از "کارگاه" من اصلاحاتی در قسمت تبديل اعداد انجام دادم که کد اصلاح شده به اين صورت است:
    Sub convert()

    'Simple VEGAF/SAHER and compatibles Text Converter
    'for ms excel
    'Code and mapping by :
    'Karagah (pt_karagah at yahoo dot com)
    'Code Revision by:
    'Sir Mojtaba (mahsuli at civil.sharif.edu)
    'you may use it freely as long as this notice
    'remains intact. ENjoy Oldies! :)


    Dim map(255) As Integer
    Dim myString As String
    Dim myChar As String * 1
    For i = 0 To 255
    map(i) = i
    Next
    map(128) = 48: map(129) = 49: map(130) = 50: map(131) = 51:
    map(132) = 52: map(133) = 53: map(134) = 54: map(135) = 55:
    map(136) = 56: map(137) = 57: map(138) = 161: map(139) = 45:
    map(140) = 191: map(141) = 194: map(142) = 198: map(143) = 193:
    map(144) = 199: map(145) = 199: map(146) = 200: map(147) = 200:
    map(148) = 129: map(149) = 129: map(150) = 202: map(151) = 202:
    map(152) = 203: map(153) = 203: map(154) = 204: map(155) = 204:
    map(156) = 141: map(157) = 141: map(158) = 205: map(159) = 205:
    map(160) = 206: map(161) = 206: map(162) = 207: map(163) = 208:
    map(164) = 209: map(165) = 210: map(166) = 142: map(167) = 211:
    map(168) = 211: map(169) = 212: map(170) = 212: map(171) = 213:
    map(172) = 213: map(173) = 214: map(174) = 214: map(175) = 216:
    map(224) = 217: map(225) = 218: map(226) = 218: map(227) = 218:
    map(228) = 218: map(229) = 219: map(230) = 219: map(231) = 219:
    map(232) = 219: map(233) = 221: map(234) = 221: map(235) = 222:
    map(236) = 222: map(237) = 223: map(238) = 223: map(239) = 144:
    map(240) = 144: map(241) = 225: map(243) = 225: map(244) = 227:
    map(245) = 227: map(246) = 228: map(247) = 228: map(248) = 230:
    map(249) = 229: map(250) = 229: map(251) = 229: map(252) = 237:
    map(253) = 237: map(254) = 237:

    For Each c In Selection
    If c.Value <> "" Then
    myString = c.Value
    temp = ""
    endi = Len(myString)
    h:
    For i = endi To 1 Step -1
    myChar = Chr(map(Asc(Mid(myString, i, 1))))
    If (myChar = "0") Or (myChar = "1") Or (myChar = "2") Or (myChar = "3") Or (myChar = "4") Or (myChar = "5") Or (myChar = "6") Or (myChar = "7") Or (myChar = "8") Or (myChar = "9") Then
    starti = i
    flag = True
    Do
    i = i - 1
    If i > 0 Then myChar = Chr(map(Asc(Mid(myString, i, 1))))
    Loop Until (i < 1) Or ((myChar <> "0") And (myChar <> "1") And (myChar <> "2") And (myChar <> "3") And (myChar <> "4") And (myChar <> "5") And (myChar <> "6") And (myChar <> "7") And (myChar <> "8") And (myChar <> "9"))
    endi = i + 1
    Exit For
    End If
    temp = temp + myChar
    Next
    If flag Then
    For i = endi To starti Step 1
    myChar = Chr(map(Asc(Mid(myString, i, 1))))
    temp = temp + myChar
    Next
    endi = endi - 1
    flag = False
    GoTo h:
    End If
    c.FormulaR1C1 = temp
    End If
    Next
    End Sub




    ضمنا يادتون باشه که بعد از تبديل و انجام مراحل ذکر شده توسط "کارگاه" بايد اين Database رو با Engoding:

    '<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">'

    Save کنيد و بعد با IE، باز Encoding رو به Arabic (Windows برگردونيد و باز هم جدول رو Copy n Paste کنيد به Excel.
    موفق باشيد.
     
  14. avajang.com .leftavajang.com.right
  15. vafalik

    vafalik کاربر تازه وارد

    تاریخ عضویت:
    ‏16 فوریه 2004
    نوشته ها:
    2
    تشکر شده:
    0
    دوستان عزیز، راهنائیهای شما رو خوندم و عینا عمل کردم ولی درست نشد. حس میکنم یه جایی داده های من مشکل داره. شما در مورد سپند حرف زدین ولی داده های من vegaf هست.فکر میکنم جدول map تو اون ماکرو درست تبدیل نمیکنه.
    آیا در اکسل باید فونت خاصی رو انتخاب کنم؟ یا موقع بردن به اکسل باید نوع دیگری غیر از windows ansi رو انتخاب کنم؟ شدیدا به کمک احتیاج دارم. لطفا به دادم برسید.
    vafalik@gmail.com
    متشکرم - یه دنیا:(
     
  16. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    یه سرچی توی قسمت وی بی بکن یه کدی بود که همین کار رو میکرد ببین جواب میده یا نه
     
  17. mazoolagh

    mazoolagh کاربر فعال شبکه و صفحات استاتیک کاربر فعال

    تاریخ عضویت:
    ‏10 آپریل 2004
    نوشته ها:
    2,940
    تشکر شده:
    7
    بهتره که فایل dbf رو اول به access ایمپورت و کد تبدیل رو در محیط access اجرا کرد.

    کد تبدیل هم چیزی جز یک جایگزینی ساده نیست.
     
  18. rmb_ali

    rmb_ali Registered User

    تاریخ عضویت:
    ‏15 مارس 2003
    نوشته ها:
    1,219
    تشکر شده:
    20
    اگر بخواهيم تو دلفي كار تبديل رو انجام بديم چيكار كنيم
     
  19. kavehmb

    kavehmb کاربر تازه وارد

    تاریخ عضویت:
    ‏12 نوامبر 2006
    نوشته ها:
    5
    تشکر شده:
    0
    محل سکونت:
    Tehran
    من این برنامه را پیدا کردم ولی demo هست و فقط 10 رکورد را نشان میدهد!
    http://helia2000.tripod.com/index_files/Page944.htm
    البته مثل اینکه پروین 2001 هم چنین کاری میکنه!

    کسی کرک این برنامه ها را نداره؟
     
  20. f_h1360

    f_h1360 کاربر تازه وارد

    تاریخ عضویت:
    ‏7 دسامبر 2006
    نوشته ها:
    6
    تشکر شده:
    0
    سلام دوستان
    من این ماکرو رو فایل با 50000 رکورد اجرا کردم بسیار خوب بود فقط بعضی کلمات رو به هم می چسباند.به هر حال ممنون
    در ضمن من یک dbf با 1000000 رکورد دارم نمی توانم قسمت قسمتش کنم . می خواهم اون رو مستقیماٌ به Sql server واردش کنم لطفاً راهنماییم بکنید که چطور این کار را انجام دهم
    دست شما درد نکنه
     
  21. rmb_ali

    rmb_ali Registered User

    تاریخ عضویت:
    ‏15 مارس 2003
    نوشته ها:
    1,219
    تشکر شده:
    20
    من خودم بالاخره استين بالا زدم و يه برنامه براي اينكار نوشتم فقط در مورد فيلدهايي كه بصورت تركيبي عدد و نوشته دارن مشكل دارم كه اگر كسي كمك كنه ممنون ميشم


    اينم لينك دانلودش
     
  22. f_h1360

    f_h1360 کاربر تازه وارد

    تاریخ عضویت:
    ‏7 دسامبر 2006
    نوشته ها:
    6
    تشکر شده:
    0
    سلام
    من هم خواستم بنویسم ولی نتونستم dbf رو توی vb6 باز کنم می خوام فیلد فیلد از dbf بخونم بعد تبدیلش کنم بعد به sql ارسالش بکنم
    هرکس میتونه خواهش می کنم کمکم کنه