Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Move dữ liệu trong 1 file sang 1 vị trí khác

  1. #1
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    Mặc định Move dữ liệu trong 1 file sang 1 vị trí khác

    là thế này ,giả sử một file gồm 8 byte như sau:
    abcdefgh
    giờ move đoạn bcd lên phía trước 2byte thì sẽ thành:
    abcbcdgh
    với dữ liệu ít thì việc này rất đơn giản là đọc toàn bộ lên mảng byte rồi ghi vào vị trí mong muốn.
    Nhưng giả sử đoạn mình cần move rất lớn , việc load lên ram là không khả thi. Các bác có biết trong c# có class nào làm giúp việc này không.
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Post gì mà lắm chỗ
    Còn tùy mục đích của project, tùy dạng file ( Frame ảnh, CSDL, binary file...) mà áp dụng chứ đâu thể làm máy móc được....
    Với file nhị phân cần chèn 1 byte vào trước 1 GB thì không còn cách nào khác phải di chuyển cả khối 1 GB dữ liệu, nếu ram không đủ load cả 1G thì load lần lượt từng khối nhỏ 1M,các lớp thao tác với stream, buffer đều có tùy chọn đọc theo kích cỡ xác định mà.
    Với các dữ liệu có cấu trúc thì chẳng dại như vây, cách đơn giản là chia nhỏ dữ kiện đó ra làm nhiều mảnh , mỗi mảnh có 1 key để ánh xạ đến từng mảnh rùi thao tác trên toàn bộ KEY là xong,1G dữ kiện nhưng số KEY chỉ tính khoảng vài chục KB bộ nhớ thui, chính vì thế mới phát sinh các kiểu , chuẩn file ảnh ,media... về nguyên tắc ta phải có 1 header info để lưu thông tin về các dữ kiện còn lại, ví dụ ta có 1 file gồm nhiều frame ảnh kích cỡ 1024x768x32
    một frame sẽ tốn 3M ,nếu ảnh có 100 Frame sẽ là 300MB, nếu thêm 1 khung ảnh vô đầu thì cách củ chuối là tạo 1 file mới, chèn
    frame đầu , rùi copy 100 frame sau vào kết quả chúng ta phải di chuyển > 300MB dữ kiện, nhưng nếu tổ chức lại dữ kiện thì sẽ rất khỏe, ta tạo 1 header như sau
    Byte ID : 2 Byte
    CHieuRong : 2byte
    ChieuCao : 2 Byte
    độ sâu màu : 1 byte
    Số khung hình: 2 byte
    Địa chỉ khung thứ 1 : 2 byte
    Index khung hình thứ 1: 2 byte
    ...
    Địa chỉ khung thứ n : 2 byte
    Index khung hình thứ n: 2 byte
    .. dự trữ
    Dữ kiện khung hình thứ 1 ( 3M)
    Dữ kiện khung hình thứ 2 (3M)
    Dữ kiện khung hình thứ N ...
    như vậy có thể thấy để ghi thêm 1 khung hình vào phía trước thì chỉ việc append 3M vào cuối file,đọc header và chỉnh lại index của tất cả các khung hình là xong ( header có kích cỡ nhỏ hơn nhiều ngàn lần so với dữ kiện ), 1 cấu trúc file thực tế sẽ còn phức tạp hơn thế, mình chỉ minh họa thôi
    http://caulacbovb.com/forum/viewtopic.php?f=33&t=12629

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    hai diễn đàn khác nhau mà, có phải trên 1 diễn đàn đâu mà ??? . Mà em định thao tác 5 triệu phần tử * 4 byte cũng cỡ 15 mb ram đó
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Hơ hơ 15M nhằm nhò gì , dùng PASCAL for DOS bộ nhớ chỉ giới hạn có 640KB còn xử lý được các file vài trăm MB mà,đây chính là nguyên tắc ánh xạ bộ nhớ hay bộ nhớ phân trang đó mà
    Về nguyên tắc , các thao tác truy nhập đĩa phụ thuộc hoàn toàn vào tốc độ đọc của ổ cứng và độ phân mảnh của dữ liệu cho lên việc em đòi hỏi chỉ được phép thao tác 100MB trong 0.5 giây là không thể với các ổ cứng chậm, với các ổ cứng đời mới còn phải mất vài giây ,ví dụ các ổ cứng 20GB ATA 33 -66 -100 ,khi dùng API đọc ,ghi xen kẽ với vùng đệm 1MB cũng chỉ đạt tầm 20MB /1 sec mà thôi trên main intel 865, mặc dù dùng direct disk access sẽ tăng tốc độ gần đạt với tốc độ nhà sản xuất đưa ra = 100 MB 1 sec nhưng cách này không áp dụng được với .net
    Code:
     5 triệu phần tử * 4 byte cũng cỡ 15 mb ram
    hì, 1 chương trình .NET dùng hết 15 MB là còn khiêm tốn mà!!!!
    Đã được chỉnh sửa lần cuối bởi Haipt : 27-12-2007 lúc 03:24 PM.

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    em đang nghiên cứu cái này, nhưng cũng có thể đọc cả cụm vì chả ai dùng đến 5 triệu bản ghi cho data bằng text cả với lại máy tính càng ngày càng mạnh .
    http://www.codeproject.com/KB/cs/Ins...tInCSharp.aspx
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  6. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Mặc định Move dữ liệu trong 1 file sang 1 vị trí khác

    sặc đưa link cũng sai bét nhè ,mà em chưa nói là em xử lý loại dữ liệu nào, và định làm gì ???

  7. #7
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    làm từ điển , nhìn chữ ký biết liền , làm cái 5 triệu từ bằng code tự sinh thôi để test tốc độ . dữ liệu binary file (bao gồm string và vị trí của từ tính từ đầu file kiểu uint), giới hạn dữ liệu 4 Gb cho mỗi bộ từ điển . em không dùng thuật toán cây nhị phân hay avl thông thường đâu , tìm kiếm từ bằng thuật toán tìm kiếm nhị phân đó. dữ liệu nằm ở đầu file. phần cuối là mảng chứa vị trí, giống kiểu mảng con trỏ đó , đã sắp xếp . Lúc thêm xoá thì chỉ chỉnh phần mảng này thôi, vì dữ liệu 4 byte cho mỗi phần từ nên tốc độ sẽ nhanh. Còn link sai chỗ nào ???
    Đã được chỉnh sửa lần cuối bởi tienlbhoc : 27-12-2007 lúc 03:51 PM.
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

Các đề tài tương tự

  1. Copy/move item từ listview1 sang listview2 với số lượng
    Gửi bởi quang1991vn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 17-06-2013, 10:56 PM
  2. Move control từ panel1 sang panel2 và ngược lại
    Gửi bởi truongvu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 07-07-2012, 11:27 AM
  3. Copy, Rename, Move file khi đang sử dụng (in use)
    Gửi bởi heroes1412 trong diễn đàn Thắc mắc chung
    Trả lời: 1
    Bài viết cuối: 03-03-2012, 03:13 PM
  4. Mã nguồn C Lỗi move data từ file to new file qua stack,các bạn giúp mình nha.
    Gửi bởi manta trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 08-10-2011, 05:16 PM
  5. Move file đè lên file đã có trong C#?
    Gửi bởi dotritiep trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 03-08-2011, 06:59 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn