PDA

View Full Version : دستوري براي حذف SPACE از يك رشته متني



ariobarzan
چهارشنبه 29 تیر 1390, 15:19 عصر
با سلام
آيا دستوري براي حذف SPACE از يك رشته متني مثل trim وجود دارد يا خير
چون trim فقط از ابتدا يا انتها Space رو حذف ميكنه
اگه اين چنين دستوري وجود نداره راه حل پيشنهادي چيه؟
كاربردش هم اينه كه مثلا در ورود نام و نام خانوادگي يك فرد اگه كاربر بين نام و نام خانوادگي فاصله كم يا زياد بده قابل تشخيص باشه.
دوستان اگه پروسيجر يا فانكشن آماده دارند لطف كنند ممنون ميشم:تشویق:

یوسف زالی
چهارشنبه 29 تیر 1390, 16:19 عصر
سلام.
یه حلقه بگذار و اگر فاصله بود اون رو فقط به یک فاصله کاهش بده.
این مهمه چون نباید نام به نام خانوادگی بچسبه.
شما سعی کن مشکل داشتی بگو کمک می کنیم.

ariobarzan
پنج شنبه 30 تیر 1390, 08:14 صبح
سلام
ممنون از توجه شما
منظورتون از حلقه اینه که کل رشته رو بریزم تو یه آرایه و بعد یکی یکی چک کنم اگه space بود شیفت بدم؟

یوسف زالی
پنج شنبه 30 تیر 1390, 10:16 صبح
بله اما رشته خودش آرایه هست.
لازم نیست بریزی تو آرایه دیگه

ariobarzan
پنج شنبه 30 تیر 1390, 16:39 عصر
اگه ممکنه لطف کنید و بیشتر توضیح بدید اگه کد های مربوطه رو هم بزارید که خیلی لطف می کنید.

Felony
پنج شنبه 30 تیر 1390, 17:26 عصر
كاربردش هم اينه كه مثلا در ورود نام و نام خانوادگي يك فرد اگه كاربر بين نام و نام خانوادگي فاصله كم يا زياد بده قابل تشخيص باشه.
فاصله کم چه طور قابل تشخیص میشه ؟! مثلا من میام مینویسم " مجتبیتاجیک " ار کجا میفهمید کجاش باید Space اضافه کنید ؟!

تنها هدفی که میتونید داشته باشید این هست که اگر جایی در وسط رشته بیشتر از یک Space زده شده بود پاکش کنید که کدتون به صورت زیر باید نوشته بشه :

var
temp: string;
CharCount: Integer;
begin
temp := Trim(Edit1.Text);
for CharCount := Length(temp) downto 0 do
if (temp[CharCount] = ' ') and (temp[CharCount - 1] = ' ') then
Delete(temp, CharCount, 1);
Edit1.Text := temp;
end;

ariobarzan
پنج شنبه 30 تیر 1390, 19:29 عصر
ممنون از پاسخ شما
من توی دیتا بیس یک فیلد دارم برای نام و نام خانوادگی که اونو کاربر وارد میکنه مثلا ( مجتبی تاجیک ) یه فیلد رو هم خودم پر میکنم بصورت مجتبیتاجیک
حالا اگه کاربر دوباره اطلاعات رو وارد کنه که بین اسم و فامیل فضای زیادی گذاشته باشه من دوباره فیلد خودم میشه مجتبیتاجیک چون Space رو حذف کردم حالا میتونم تشخیص بدم که این نام و نام خانوادگی قبلا وارد شده و کار راحت تر انجام میشه

Mahbod Rad
یک شنبه 16 مرداد 1390, 20:19 عصر
دوست عزیز از روش زیر هم میتوانید این کار را انجام دهید
با فرض آنکه رشته شما TxtLocal باشد

while Pos(' ',TxtLocal)<>0 do
begin
TxtLocal:=StringReplace(TxtLocal,' ','',[rfReplaceAll]);
end;

Felony
یک شنبه 16 مرداد 1390, 21:01 عصر
دوست عزیز از روش زیر هم میتوانید این کار را انجام دهید
با فرض آنکه رشته شما TxtLocal باشد

while Pos(' ',TxtLocal)<>0 do
begin
TxtLocal:=StringReplace(TxtLocal,' ','',[rfReplaceAll]);
end;
اولا کد شما تمام Space های داخل رشته رو حذف میکنه ، دوما وقتی از StringReplace همراه با پارامتر rfReplaceAll استفاده میکنید دیگه به اون حلقه نیازی نیست ، با یک بار اجرای کد زیر تمام Space ها حذف میشه :

TxtLocal:=StringReplace(TxtLocal,' ','',[rfReplaceAll]);

Delphi 2010
دوشنبه 17 مرداد 1390, 21:32 عصر
دوستان یعنی دلفی هیچ کدی که فاصله بین رشته رو حذف کنه نگذاشته توی توابعش

یوسف زالی
دوشنبه 17 مرداد 1390, 22:18 عصر
یک راه به ذهنم می رسه:
اگر b رو space بگیریم شاید بشه تمام bb ها رو با b جایگزین کنیم. این جوری همیشه یک فاصله باقی میمونه:


1
TxtLocal:=StringReplace(TxtLocal,'bb','b',[rfReplaceAll]);




b به خاطر این که space دیده نمی شد.
کد کامل:


var
s: string;
begin
s := 'salam khubi chetori ?';
while pos(' ', s) > 0 do
s := StringReplace(s, ' ', ' ', [rfReplaceAll]);
end;