نمایش نتایج 1 تا 8 از 8

نام تاپیک: سوال درمورد Reverse کردن آرایه ها بدون استفاده از حافظه رم

  1. #1

    سوال درمورد Reverse کردن آرایه ها بدون استفاده از حافظه رم

    چطوري ميشه Reverse يه آرايه رو به صورت يه آرايه ديگه از يه تابعي گرفت.
    با Array.reverse ميشه يه آرايه رو برعکس کرد اما من ميخوام برعکس اون آرايه رو با مقدار بدست بیارم
    راستش آرایه مورد نظر من ممکنه خیلی حجم داشته باشه و Readonly ـه به خاطر همین نمیتونم به یه آرایه دیگه کپی و سپس Reverse ـش کنم چون به مقدار زیادی حافظه رم احتیاج داره
    چطوری میشه مشکل رو حل کرد؟؟؟

  2. #2

    نقل قول: سوال درمورد Reverse کردن آرایه ها بدون استفاده از حافظه رم

    سلام
    اینجور که نمیشه
    شما لازمه دو تا آرایه همزمان در حافظه داشته باشید یکی همون اصلیه و دومی اونی هست که توسط تابع برگردونده میشه

  3. #3

    نقل قول: سوال درمورد Reverse کردن آرایه ها بدون استفاده از حافظه رم

    ینی هیچ راهی برای Revesrse کردن مثلاً آرایه بایتی که از File.ReadAllBytes خونده میشه و اون رو مستقیما با File.writeallbytes به یه فایل نوشت،وجود نداره؟؟؟

  4. #4

    نقل قول: سوال درمورد Reverse کردن آرایه ها بدون استفاده از حافظه رم

    سلام دوست عزیز .چرا میشه . فقط به یک متغیر byte به عنوان swap نیاز دارین :


    byte[]Character= File.ReadAllBytes(_addres);
    byte swap;
    for (int i = 0; i < (Character.Length/2); i++)
    {
    swap = Character[i];
    Character[i] = Character[(Character.Length - 1) - i];
    Character[(Character.Length - 1) - i] = swap;
    }
    string res = Encoding.UTF8.GetString(Character);

  5. #5

    نقل قول: سوال درمورد Reverse کردن آرایه ها بدون استفاده از حافظه رم

    نقل قول نوشته شده توسط aminmousavi مشاهده تاپیک
    سلام دوست عزیز .چرا میشه . فقط به یک متغیر byte به عنوان swap نیاز دارین :


    byte[]Character= File.ReadAllBytes(_addres);
    byte swap;
    for (int i = 0; i < (Character.Length/2); i++)
    {
    swap = Character[i];
    Character[i] = Character[(Character.Length - 1) - i];
    Character[(Character.Length - 1) - i] = swap;
    }
    string res = Encoding.UTF8.GetString(Character);
    درسته اما بازم از حافظه رم استفاده زیادی میکنه.تو فایل هایی با حجم بسیار بالا مثلاً 1 یا 2 GB کار نمیکنه

  6. #6

    نقل قول: سوال درمورد Reverse کردن آرایه ها بدون استفاده از حافظه رم

    این تابع می تونه این کار را انجام بده فقط لازمه سایز بافر را تعیین کنید یعنی حافظه موقتی که برای خواندن و نوشتن در اختیار دارید

    void ReadWrite1(int BufferSize, string inpuFile, string ouputFile)
    {
    byte[] buffer = new byte[BufferSize];
    Stream fin = File.OpenRead(inpuFile);
    Stream fout = File.OpenWrite(ouputFile);
    int rdsiz = (int)fin.Length - ((int)fin.Length / BufferSize) * BufferSize;
    for (int i = (int)fin.Length/BufferSize; i >= 0 ; i--)
    {
    fin.Seek(i * BufferSize,0);
    fin.Read(buffer, 0, rdsiz);
    Array.Reverse(buffer, 0 , rdsiz);
    fout.Write(buffer, 0, rdsiz);
    rdsiz = BufferSize;
    }
    fin.Close();
    fout.Close();
    }

  7. #7

    نقل قول: سوال درمورد Reverse کردن آرایه ها بدون استفاده از حافظه رم

    نقل قول نوشته شده توسط rahnema1 مشاهده تاپیک
    این تابع می تونه این کار را انجام بده فقط لازمه سایز بافر را تعیین کنید یعنی حافظه موقتی که برای خواندن و نوشتن در اختیار دارید
    خیلی ممنون.کد شما خیلی به دردم خورد.اما بازم یه مشکل داره اونم اینه که آرایه ای که میسازه بعد از استفاده از بین نمیبره و یه آرایه جدید میسازه.(تو تسک منیجر مقدار حافظه رم دائماً افزایش میافت و بعد از اینکه فایل درست شد و تموم شد رم خالی میشه)هر کاری کردم نتونستم جوری دستکاری کنم که تو همون متغییر ها ذخیره کنه.
    ولی بازم ممنون.خیلی کمکم کرد

  8. #8

    نقل قول: سوال درمورد Reverse کردن آرایه ها بدون استفاده از حافظه رم

    اینجور فکر نکنم مشکلی پیش بیاد

    void Reverse1(byte[] buffer, int index, int length)
    {
    int nesf = index + (length - 1) / 2;
    int j = index + length - 1;
    byte temp;
    for (int i = 0; i < nesf; i++)
    {
    temp = buffer[i];
    buffer[i] = buffer[j];
    buffer[j--] = temp;
    }
    }
    void ReadWrite1(int BufferSize)
    {
    byte[] buffer = new byte[BufferSize];
    Stream fin = File.OpenRead("myfile.txt");
    Stream fout = File.OpenWrite("myfile2.txt");
    int rdsiz = (int)fin.Length - ((int)fin.Length / BufferSize) * BufferSize;
    for (int i = (int)fin.Length/BufferSize; i >= 0 ; i--) {
    fin.Seek(i * BufferSize,0);
    fin.Read(buffer, 0, rdsiz);
    Reverse1(buffer, 0 , rdsiz);
    fout.Write(buffer, 0, rdsiz);
    rdsiz = BufferSize;
    }
    fin.Close();
    fout.Close();

    }

تاپیک های مشابه

  1. مقید کردن کنترلهای فرم بدون استفاده از DataBindings
    نوشته شده توسط AHS.tolooe در بخش برنامه نویسی در 6 VB
    پاسخ: 0
    آخرین پست: چهارشنبه 07 فروردین 1387, 21:42 عصر
  2. پیدا کردن یوزر جاری بدون استفاده از geusername
    نوشته شده توسط Payman62 در بخش برنامه نویسی در 6 VB
    پاسخ: 9
    آخرین پست: دوشنبه 07 آبان 1386, 21:13 عصر
  3. کمک : بازم سوال درمورد پر کردن datagrid
    نوشته شده توسط danial82 در بخش C#‎‎
    پاسخ: 7
    آخرین پست: دوشنبه 14 شهریور 1384, 23:47 عصر
  4. سوال درمورد ping کردن از کامپیوتری که با پروکسی به اینترنت وصله
    نوشته شده توسط Ali_Hashemi در بخش توسعه نرم افزارهای تحت شبکه
    پاسخ: 3
    آخرین پست: جمعه 10 تیر 1384, 22:59 عصر
  5. سوال درمورد add کردن چند زبان به یک پروژه
    نوشته شده توسط taghavi در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: چهارشنبه 15 مهر 1383, 15:14 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •