ايران ويج

نسخه‌ی کامل: مشکل با string
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
یه نگاه به کد زیر بیاندازید

این کد یک متن رو از یک فایل متنی تا رسیدن به به نقطه میخونه و هر کلمه رو به یک رشته نسبت میده.
ولی چند تا مشکلی که وجود داره اینه که باید طول آرایه حداقل به اندازه طولانی ترین کلمه باشه و تعداد آرایه ها به اندازه طولانی ترین جمله واین یعنی اشغال حافظه بدون استفاده من میخواستم این مشکل رو با استفاده از string حل کنم ولی نمیدونم چه طور میشه یک رشته دو بعدی رو به صورت کاراکتری پر کرد (دلفی این رو ارور میده
کد:
typ
word : array of sttring;
word[][] := 'h')
در ضمن نمیتونم کاراکتر ها رو برابر NULL ( مثل سی)قرار بدم
لطفا کمک کنید.
شما باید از تابع setlenth برای تنظیم طول ارایتون در زمان دلخواه استفاده کنین
برای کسب اطلاعات بیشتر به تاپیک زیر مراجعه کنید
http://forum.iranled.com/showthread.php?tid=6800
ممنون ، تاپیک جالبی بود( البته هنوز تمامش رو نخوندم) ولی مشکل حل نشد
وقتی از آرایه دو بعدی کاراکتری ثابت استفاده میکنم مثلا با دستور
showmessage(w[i]);
تمام ستونهای سطر iام چاپ میشد ولی در آرایه های پویا این طور نیست یعنی اگر تعریف کنیم
w : array of array of char;
setlength(w,16,16);
وقتی بنویسیم
ShowMessage(w[i]);
ارور زیر رو داریم
[Error] Unit1.pas(70): Incompatible types: 'String' and 'dynamic array'
[Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit1.pas'
این موارد برای رشته ها هم صادقه.
تو ارایه های 1 بعدی ستونی وجود نداره و ادرس شما w[i] مربوط به یک بلاک ثابت از ارایه هست که با این دستور محتویات اون بلاک نشون داده میشه اما تو ارایه های 2 بعدی شما هم شما برای نمایش هر بلاک باید شماره سطر و ستون رو بدید برای چاپ یک ستون باید با استفاده از یک حلقه کل ستون رو پیمایش کنین که در این حالت مقدار سطر ثابته و مقدار ستون به نسبت متغییر حلقه تغییر میکنه
من هم به این روش فکر کردم ولی این فقط برای چاپ کلمه مفیده ولی من یک کلمه رو بصورت کامل میخوام چو باید بلاهای دیگه ای مثل مقایسه باکلمه دیگه و.. رو سرش بیارم .
کد به صورت زیر اصلاح شد و مشکل تعداد کلامات حل شد ولی تعداد حروف نه .
اگه راه حل دیگه ای نیست
میشه کاری کرد که کاراکتر ها NULL بشه ؟
کد:
var
yourfile : TextFile;
source : TextFile;
i,j,n: integer;
wo : array[1..1,1..15] of char;
w : char;
word : array of string;

begin

AssignFile(source, 'f:/Test.txt');
AssignFile(yourFile, 'f:/Test2.txt');

i := 0;

ReWrite(yourFile);
Reset(source);
Read(source,w);

while w <> '.' do
begin

while w = ' ' do
Read(source,w);

if w = '.' then
break ;

i := i+1;
j := 1;

while (w <> ' ') and (w <> '.') do
begin
wo[1][j] := w;
j := j+1;
Read(source,w);
end;

setlength(word,i);
word[i-1] := wo[1] ;




ShowMessage(word[i-1]);
end;


for n := 0 to i-1 do
writeLn(yourFile,word[n]);

// Close the file for the last time
CloseFile(source);
CloseFile(yourFile);
button1.Enabled := false;

end;
میتونین بین هر کلمه یک space قرار بدین تا بتونین کلمات و حروف رو مقایسه کنین
شما چرا از عناصر دلفی مثل memo و tstringlist استفاده نمیکنین؟ کارتونو اسونتر میکنن
:cool:lord_viper عزیز خیلی ممنون از راهنمایی هاتون
واقعا توجه شما به این تاپیک و پاسخ دادن به یک مبتدی رو باید ستودClap
نقل قول: میتونین بین هر کلمه یک space قرار بدین تا بتونین کلمات و حروف رو مقایسه کنین
منظور تون رو متوجه نشدم چون این کد با توجه به space بین کلمات اونها رو از هم تمیز میده ولی وقتی میخاد دوباره همون کلمه رو تو یک فایل دیگه بنویسه چون کاراکتر های اضافی داره باقی رو به دلخواه خودش پر میکنه مثلا book رو مینویسه bookِِّؤّآۀِی.
نقل قول: شما چرا از عناصر دلفی مثل memo و tstringlist استفاده نمیکنین؟ کارتونو اسونتر میکنن
چون بلد نیستم!!!!ShyQ;
من یک مدت سی کار کردم بعد یکهو بسرم زد یک مترجم متن بنویسم (هر چند هدف بزرگیه ولی من ای کار رو میکنمCool)
البته کدها والگوریتم هارو باتوجه به زبان سی نوشتم ولی دیدم از یک فایل نمیتونم به عنوان دیتا بیس استفاده کنم شروع کردم به پرسجو تا رسیدم به دلفی
حالا باید کدها والگوریتم ها رو به دلفی برگردونم.Confused
خب خوبه حالا شما بگین دقیقا میخواهین با این کدها چیکار کنین تا من بتونم بیشتر کمکتون کنم بهتره به هیچ عنوان از ارایه های کاراکتری استفاده نکنین string بهتره میتونه اون کلمه رو تو خودش نگه داره و اون مشکلات حروف اظافه حل میشه
سلام دوست عزیز
این سورس رو واستون اماده کردم یک جدا کننده کلمات هست شما فایلتونو به برنامه میدین این برنامه کلمات رو جدا میکنه و در listbox نمایش میده برنامه با سورس هست تا شما بتونین هر جور که مایلین تغییرش بدین
موفق باشید
دانلود
حجم 189kb
خیلی ممنون از لطفتون
من وقتی پست شماره هشت رو میخوندم تو کلاس "روشهای چندمتغیری پیوسته ۱"بودم (به لطف ایرانسل و operamini ) همونجا با توجه به جمله آخرتون ایده زیر به ذهنم رسید و نیم ساعت پیش که اومدم خونه تو دلفی اجراش کردم درست شد حالا دیگه نه کاراکتر اضافه دارم نه رشته اضافیSmile.HappyClap
کد:
i := i+1;
  setlength(word,i);                      

  while (w <> ' ') and (w <> '.') do
  begin
    word[i-1] := concat(word[i-1],w);
    Read(source,w);
  end;

  //ShowMessage(word[i-1]);
البته فایلی رو که فرستادید رو دانلود میکنم
باز هم از کمکهاتون متشکرم حالا میرم کار با دیتا بیس تو دلفی رو یاد بگیرم اگه در این مورد هم پیشنهادی دارید با گوش جان میشنوم.
nod 32Exclamation اخطار ویروسی بودن میده.!013
صفحه‌ها: 1 2