ورود

View Full Version : TCharArray



dr-delphi
یک شنبه 15 خرداد 1390, 19:01 عصر
سلام
میشه بگید که متغیرTCharArrayمربوط به چهusesهست؟
من از دلفی7استفاده می کنم و هنگام کامپایل کردن
[Error] Unit1.pas(27): Undeclared identifier: 'TCharArray'
میده.

BORHAN TEC
یک شنبه 15 خرداد 1390, 19:43 عصر
میشه بگید که متغیرTCharArrayمربوط به چهusesهست؟
مربوط به یونیت SysUtils است.

dr-delphi
دوشنبه 16 خرداد 1390, 11:39 صبح
نه باز هم کد ادیتور من تشخیص نمی ده:متعجب:

Mahmood_M
دوشنبه 16 خرداد 1390, 12:11 عصر
تا اونجایی که من می دونم چیزی به نام TCharArray نداریم ! ، می تونید خودتون به عنوان یک Type تعریفش کنید ، به عنوان مثال :

Type
TCharArray = Array of Char;

یوسف زالی
دوشنبه 16 خرداد 1390, 12:23 عصر
اما من فکر کنم که تو دلفی XE داشتیم.

dr-delphi
دوشنبه 16 خرداد 1390, 13:38 عصر
جناب مدیر یک سر به این ادرس برید
http://www.delphibasics.co.uk/RTL.asp?Name=Array

Felony
دوشنبه 16 خرداد 1390, 17:40 عصر
تا اونجایی که من می دونم چیزی به نام TCharArray نداریم ! ، می تونید خودتون به عنوان یک Type تعریفش کنید ، به عنوان مثال :

Type
TCharArray = Array of Char;

داریم ، در کتابخانه SysUtils به صورت Generic پیاده شده :
Type
TCharArray = TArray<Char>;
پیاده سازی TArray هم در کتابخانه System هست .

Mahmood_M
سه شنبه 17 خرداد 1390, 01:07 صبح
جناب مدیر یک سر به این ادرس برید
http://www.delphibasics.co.uk/RTL.asp?Name=Array
دوست عزیز ! ، عجله نکنید ... ! ، در همون صفحه اگر در همون قسمتی که TCharArray تعریف شده ، بر روی عبارت " Show full unit code " کلیک کنید ، کل کدهای Unit رو براتون نمایش میده و می تونید مشاهده کنید که این عبارت در Unit نوشته شده :
TCharArray = array of char; // Required below
یعنی TCharArray به عنوان یک نوع خاص وجود نداره و برای استفاده در اون کدها به صورت بالا تعریف شده
با توجه به اینکه از دلفی 7 استفاده میکنید :

من از دلفی7استفاده می کنم و هنگام کامپایل کردن ...
همچین نوعی برای استفاده در دلفی 7 موجود نیست و باید خودتون اون رو به عنوان یک Type تعریف کنید ( به صورت بالا )
...
اما ظاهرا در نسخه های جدید دلفی این نوع اضافه شده ، معذرت خواهی من رو بپذیرید ... !
البته در نسخه 2010 که من دارم به این صورت تعریف شده :

Type
TCharArray = array of Char;


در کتابخانه SysUtils به صورت Generic پیاده شده
اون تعریف Generic نیست ، TArray هست که به صورت Generic تعریف شده ( من تعریف دقیق <>TArray رو ندیدم ! ، فرض میکنیم که به صورت زیر باشه ) :

TArray<T> = Array of T;

در این صورت ، این کد :
Type
TCharArray = TArray<Char>;
برابر میشه با این کد :
Type
TCharArray = Array of Char;
به هر حال ، فرق زیادی نمی کنه ، چیزی که به نظر میاد اینه که TCharArray یک آرایه ی Dynamic از Char هست که پیاده سازیش کار مشکلی نباید باشه !

موفق باشید ...

Felony
سه شنبه 17 خرداد 1390, 05:24 صبح
اون تعریف Generic نیست ، TArray هست که به صورت Generic تعریف شده ( من تعریف دقیق <>TArray رو ندیدم ! ، فرض میکنیم که به صورت زیر باشه ) :
خوب اونی که من گفتم یعنی چی ؟!
TArray یک Generic هست و TCharArray هم به وسیله اون پیاده سازی شده ، شاید منظورم رو بد رسوندم ...


به هر حال ، فرق زیادی نمی کنه ، چیزی که به نظر میاد اینه که TCharArray یک آرایه ی Dynamic از Char هست که پیاده سازیش کار مشکلی نباید باشه !
کسی بر سر اینکه میشه پیاده سازیشون کرد بحث نکرد ، بعضی توابع هستند که به نوع داده خاصی نیاز دارند ، مثلا متد GetFiles از TDirectory که در کتابخانه IOUtils پیاده شده لیست فایل های یک مسیر رو بر میگردونه که نیاز به یک متغییر از نوع TStringDynArray داره که در کتابخانه Types به صورت زیر پیاده شده :
TStringDynArray = Array of String;
اما اگر شما دقیقا همین نوع داده ای رو در برنامتون خودتون تعریف کنید مثلا :
TMyArray = Array of String;
یا حتی همون تعریف اصلی :
TStringDynArray = Array of String;
ازتون ایراد میگیره ، یا باید از نوع داده ای تعریف شده استفاده کنید یا اینکه نوع داده ای که خودتون تعریف کردید رو به نوع داده ای درخواست شده Typecast کنید که همچین موقعی وقتی نوع داده مورد نیاز توسط خود دلفی پیاده شده کار عاقلانه ای نیست .

در کل حرف شما در مورد اینکه میشه خودمون پیادش کنیم در این مورد درسته ، ولی در بعضی موارد مثل اونی که در بالا اشاره کردم دوباره کاری به حساب میاد .