Avatar billede mulemule Nybegynder
29. juni 2005 - 17:20 Der er 10 kommentarer

Opslitning af Arrays,

Hvis jeg har en lang Array (Det er en byte[]), hvordan kan jeg så splitte den op i en række mindre arrays hvor der spittes alle de steder hvor et bestemt data stump forefindes (i mit tilfælde de to byte 0D 0A).

Altså jeg ved selvfølgelig godt at jeg bare kan skrive noget kode der gør det. Jeg er ude efter om der ikke findes en metode eller to der gør at jeg kan gøre det med en enkelt linje.

Mvh
Avatar billede wisen Nybegynder
29. juni 2005 - 18:23 #1
Jeg kender ikke andre metoder end Array.CopyTo() - men så tror jeg ligeså godt at du kan "gøre det selv".
Avatar billede burningice Nybegynder
29. juni 2005 - 18:54 #2
i sidste ende skal der jo skrives noget kode til at gøre det, spørgsmålet er så bare om nogen allerede har gjort det, eller om man selv skal gøre det.

psuodo:

public ArrayList SplitArray(byte[] arr, byte[] splitData) {
  if (splitData.Length != 2) throw new ArgumentException("SplitData must be two bytes");
  if (arr == null) throw new ArgumentExcpetion("Array must not be null");
 
  ArrayList returnArr = new ArrayList();
  int i = 0;
  int lastIndex = 0;
  while(arr.Lengh-2 == i) {

      if (arr[i] == splitData[0] && arr[i+1] == splitData[1]) {
          byte[] b = new byte[i-lastIndex]
          for (int ii = i; ii < lastIndex; ii++)
            b[ii] = arr[ii];
          returnArr.Add(b);
          lastIndex = i;
      }
     
  }

  return returnArr;
}
Avatar billede burningice Nybegynder
29. juni 2005 - 18:56 #3
for (int ii = i; ii < lastIndex; ii++)

skal vist være

for (int ii = lastIndex; ii < i; ii++)

evt for (int ii = lastIndex; ii < i-2; ii++) hvis du ikke vil have dit 0D 0A med i arrayet
Avatar billede Syska Mester
29. juni 2005 - 19:56 #4
Det kan jo altid laves på en enkelt linje, den bliver bare meget lang..... :-) *heheh*
Avatar billede arne_v Ekspert
29. juni 2005 - 22:25 #5
nu er 0D 0A jo ikke 2 helt tilfældige bytes

hvis det i virkeligheden er linier du vil læse så kan du sikkert spare en
masse kode ved at få wrappet en StreamReader/StringReader omkring dit input ...
Avatar billede arne_v Ekspert
29. juni 2005 - 22:25 #6
(fordi du så kan bruge ReadLine)
Avatar billede mulemule Nybegynder
29. juni 2005 - 23:28 #7
Tak. Ved godt at jeg kunne gøre det let ved f.eks at trylle den om til en String, og så splitte den. Men det vil jeg ikke, ide jeg vil være 100% sikker på at de forskellige bytes værdier forbliver de samme.
Avatar billede mulemule Nybegynder
29. juni 2005 - 23:29 #8
Kan heller ikek bruge det der readline, i mit konkrette eksempel. Men tak.
Avatar billede mulemule Nybegynder
29. juni 2005 - 23:29 #9
Svar i svar for at få point.
Avatar billede arne_v Ekspert
29. juni 2005 - 23:40 #10
jeg tænkte i disse baner:

using System;
using System.IO;
using System.Text;

namespace E
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            byte[] b = { 0x41, 0x0D, 0x0A, 0x42, 0x42, 0x0D, 0x0A, 0x43, 0x43, 0x43, 0x0D, 0x0A };
            StreamReader sr = new StreamReader(new MemoryStream(b), Encoding.Default);
            string line;
            while((line = sr.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }
        }
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester