Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Text parser

Text parser

Scheduled Pinned Locked Moved C#
helpquestionlounge
8 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    solutionsville
    wrote on last edited by
    #1

    I have a routine that takes identifies a specific location on each line of HEX and highlights it. It works fine until it gets to a line that the sniffer did not capture any HEX. From that point on it is highlighting random spots in the file. How should I handle identifing the error, and then continue past it without causing it to randomize the locations? Here is a sample of what I would normally see in the HEX (all one line); 2008/04/24 19:16:50 [128009]ARES_EINDICATION 010.050.082.101 103.2.01 (19d1) RX 68 bytes 19 D1 26 02 34 E8 AA 20 76 97 51 28 50 76 38 64 49 00 58 02 02 C7 88 01 C7 88 AA 50 76 38 64 49 20 76 97 51 28 D8 07 04 18 13 10 2F 00 00 10 0A 06 0A 06 06 0A 06 0A 06 06 06 06 06 06 06 06 73 74 69 9C F6 Here is a sample of the line with the error in it (all one line); 2008/04/24 19:16:51 [128009]ARES_EINDICATION 010.050.082.104 107.1.01 (1ac1) RX 68 bytes This is the snippit of the code to find the sequence numbers; private void findSequenceNumbers() { toolStripStatusLabel.Enabled = true; toolStripStatusLabel.Visible = true; //Find the ARES and ATCS L3 Sequence Numbers and change to Blue/BOLD color int lineNum = 0; bool startingNewLine = true; FontStyle style = FontStyle.Bold; string[] lines = rtbDoc.Lines; string text = rtbDoc.Text; rtbDoc.Enabled = false; for (int i = 0; i < text.Length; i++) { if (startingNewLine) { //Find and highlight ARES EINDICATION Sequence Numbers if (lines[lineNum].Contains("]ARES_EINDICATION")) { i += 154; rtbDoc.Select(i, 2); rtbDoc.SelectionFont = new Font(rtbDoc.SelectionFont, rtbDoc.SelectionFont.Style ^ style); rtbDoc.SelectionColor = Color.Blue; } //Find and highlight ARES INDICATION Sequence Number else if (lines[lineNum].Contains("]ARES_INDICATION")) { i += 154; rtbDoc.Select(i, 2); rtbDoc.SelectionFont = new Font(rtbDoc.SelectionFont, rtbDoc.SelectionFont.Style ^ style); rtbDoc.SelectionColor = Color.Blue; } //Find and highlight CODELINE INDICATION MESS

    C 1 Reply Last reply
    0
    • S solutionsville

      I have a routine that takes identifies a specific location on each line of HEX and highlights it. It works fine until it gets to a line that the sniffer did not capture any HEX. From that point on it is highlighting random spots in the file. How should I handle identifing the error, and then continue past it without causing it to randomize the locations? Here is a sample of what I would normally see in the HEX (all one line); 2008/04/24 19:16:50 [128009]ARES_EINDICATION 010.050.082.101 103.2.01 (19d1) RX 68 bytes 19 D1 26 02 34 E8 AA 20 76 97 51 28 50 76 38 64 49 00 58 02 02 C7 88 01 C7 88 AA 50 76 38 64 49 20 76 97 51 28 D8 07 04 18 13 10 2F 00 00 10 0A 06 0A 06 06 0A 06 0A 06 06 06 06 06 06 06 06 73 74 69 9C F6 Here is a sample of the line with the error in it (all one line); 2008/04/24 19:16:51 [128009]ARES_EINDICATION 010.050.082.104 107.1.01 (1ac1) RX 68 bytes This is the snippit of the code to find the sequence numbers; private void findSequenceNumbers() { toolStripStatusLabel.Enabled = true; toolStripStatusLabel.Visible = true; //Find the ARES and ATCS L3 Sequence Numbers and change to Blue/BOLD color int lineNum = 0; bool startingNewLine = true; FontStyle style = FontStyle.Bold; string[] lines = rtbDoc.Lines; string text = rtbDoc.Text; rtbDoc.Enabled = false; for (int i = 0; i < text.Length; i++) { if (startingNewLine) { //Find and highlight ARES EINDICATION Sequence Numbers if (lines[lineNum].Contains("]ARES_EINDICATION")) { i += 154; rtbDoc.Select(i, 2); rtbDoc.SelectionFont = new Font(rtbDoc.SelectionFont, rtbDoc.SelectionFont.Style ^ style); rtbDoc.SelectionColor = Color.Blue; } //Find and highlight ARES INDICATION Sequence Number else if (lines[lineNum].Contains("]ARES_INDICATION")) { i += 154; rtbDoc.Select(i, 2); rtbDoc.SelectionFont = new Font(rtbDoc.SelectionFont, rtbDoc.SelectionFont.Style ^ style); rtbDoc.SelectionColor = Color.Blue; } //Find and highlight CODELINE INDICATION MESS

      C Offline
      C Offline
      carbon_golem
      wrote on last edited by
      #2

      That's because it looks like you're not checking to make sure that the transmission is correct. If you are counting on fixed length transmissions, make sure that you actually have the right amount of bytes. I would tackle this with regular expressions. Are you running this when receiving a message? Scott P

      "Run for your life from any man who tells you that money is evil. That sentence is the leper's bell of an approaching looter." --Ayn Rand

      S 1 Reply Last reply
      0
      • C carbon_golem

        That's because it looks like you're not checking to make sure that the transmission is correct. If you are counting on fixed length transmissions, make sure that you actually have the right amount of bytes. I would tackle this with regular expressions. Are you running this when receiving a message? Scott P

        "Run for your life from any man who tells you that money is evil. That sentence is the leper's bell of an approaching looter." --Ayn Rand

        S Offline
        S Offline
        solutionsville
        wrote on last edited by
        #3

        Good suggestion. I need to learn Regex regardless. No I am not running this real time. It is a static log that is opened after the fact. First I do a string collection and create a single line of the HEX, and put the RX/TX items at a specific location to facilitate finding the correct item in the HEX to highlight and simplfy pattern searching. Once it is in a single line format, then I look for the location to highlight, then color accordingly. Here is the raw; Correct format; 2008/04/24 19:16:50 [128009]ARES_EINDICATION 010.050.082.101 103.2.01 (19d1) RX 68 bytes 2008/04/24 19:16:50 [128009] 19 D1 26 02 34 E8 AA 20 76 97 51 28 50 76 38 64 2008/04/24 19:16:50 [128009] 49 00 58 02 02 C7 88 01 C7 88 AA 50 76 38 64 49 2008/04/24 19:16:50 [128009] 20 76 97 51 28 D8 07 04 18 13 10 2F 00 00 10 0A 2008/04/24 19:16:50 [128009] 06 0A 06 06 0A 06 0A 06 06 06 06 06 06 06 06 73 2008/04/24 19:16:50 [128009] 74 69 9C F6 Incorrect/missing format; 2008/04/24 19:16:51 [128009]ARES_EINDICATION 010.050.082.104 107.1.01 (1ac1) RX 68 bytes Brian

        C 1 Reply Last reply
        0
        • S solutionsville

          Good suggestion. I need to learn Regex regardless. No I am not running this real time. It is a static log that is opened after the fact. First I do a string collection and create a single line of the HEX, and put the RX/TX items at a specific location to facilitate finding the correct item in the HEX to highlight and simplfy pattern searching. Once it is in a single line format, then I look for the location to highlight, then color accordingly. Here is the raw; Correct format; 2008/04/24 19:16:50 [128009]ARES_EINDICATION 010.050.082.101 103.2.01 (19d1) RX 68 bytes 2008/04/24 19:16:50 [128009] 19 D1 26 02 34 E8 AA 20 76 97 51 28 50 76 38 64 2008/04/24 19:16:50 [128009] 49 00 58 02 02 C7 88 01 C7 88 AA 50 76 38 64 49 2008/04/24 19:16:50 [128009] 20 76 97 51 28 D8 07 04 18 13 10 2F 00 00 10 0A 2008/04/24 19:16:50 [128009] 06 0A 06 06 0A 06 0A 06 06 06 06 06 06 06 06 73 2008/04/24 19:16:50 [128009] 74 69 9C F6 Incorrect/missing format; 2008/04/24 19:16:51 [128009]ARES_EINDICATION 010.050.082.104 107.1.01 (1ac1) RX 68 bytes Brian

          C Offline
          C Offline
          carbon_golem
          wrote on last edited by
          #4

          So you have a file with line feeds that you make individual strings for, if I'm understanding you correctly. So all the items in the above example with the same timestamp are considered in the same transmission. Assuming the headers are never broken (not so good) you could use the RX size to count the bytes to make sure of the correct sizing. If you're considering everything between the header text (ARES_EIN---) to be one transmission, you could load a either a generic List or array String[] to hold transmissions, then colorize by line without using the index in the long string in your output window. Scott P

          "Run for your life from any man who tells you that money is evil. That sentence is the leper's bell of an approaching looter." --Ayn Rand

          S 1 Reply Last reply
          0
          • C carbon_golem

            So you have a file with line feeds that you make individual strings for, if I'm understanding you correctly. So all the items in the above example with the same timestamp are considered in the same transmission. Assuming the headers are never broken (not so good) you could use the RX size to count the bytes to make sure of the correct sizing. If you're considering everything between the header text (ARES_EIN---) to be one transmission, you could load a either a generic List or array String[] to hold transmissions, then colorize by line without using the index in the long string in your output window. Scott P

            "Run for your life from any man who tells you that money is evil. That sentence is the leper's bell of an approaching looter." --Ayn Rand

            S Offline
            S Offline
            solutionsville
            wrote on last edited by
            #5

            You are correct in your understanding. Same timestamp and same stationid e.g. [129008]. The information up to the end of the [] info is the same length. From that point on the length of the message is dictated by the type of message. Thanks for the suggestions. Brian

            C 1 Reply Last reply
            0
            • S solutionsville

              You are correct in your understanding. Same timestamp and same stationid e.g. [129008]. The information up to the end of the [] info is the same length. From that point on the length of the message is dictated by the type of message. Thanks for the suggestions. Brian

              C Offline
              C Offline
              carbon_golem
              wrote on last edited by
              #6

              Ok, you can do a very short mod to your existing code to get you in the direction. Use the .Lines property on the rich text box to get the lines array from it, Then do a foreach on the lines to go through them. If I remember right the colorization is done by character index, so generating that number would be a matter of accumulating the length of the lines properly.int total = 0; foreach(String trans in rtb.Lines){ //single transmission in trans total += s.Length; ColorizationInfo temp = new ColorizationInfo(trans); Colorize(rtbDoc, temp, total); // colors a line }
              Do you thing something like this would work? Of course I didn't go through the parsing like you did, but you get the main idea here. Scott P

              "Run for your life from any man who tells you that money is evil. That sentence is the leper's bell of an approaching looter." --Ayn Rand

              S 2 Replies Last reply
              0
              • C carbon_golem

                Ok, you can do a very short mod to your existing code to get you in the direction. Use the .Lines property on the rich text box to get the lines array from it, Then do a foreach on the lines to go through them. If I remember right the colorization is done by character index, so generating that number would be a matter of accumulating the length of the lines properly.int total = 0; foreach(String trans in rtb.Lines){ //single transmission in trans total += s.Length; ColorizationInfo temp = new ColorizationInfo(trans); Colorize(rtbDoc, temp, total); // colors a line }
                Do you thing something like this would work? Of course I didn't go through the parsing like you did, but you get the main idea here. Scott P

                "Run for your life from any man who tells you that money is evil. That sentence is the leper's bell of an approaching looter." --Ayn Rand

                S Offline
                S Offline
                solutionsville
                wrote on last edited by
                #7

                Yes, I think this will work. I will bang it out later this afternoon, and reply with results. Thanks much. Brian

                1 Reply Last reply
                0
                • C carbon_golem

                  Ok, you can do a very short mod to your existing code to get you in the direction. Use the .Lines property on the rich text box to get the lines array from it, Then do a foreach on the lines to go through them. If I remember right the colorization is done by character index, so generating that number would be a matter of accumulating the length of the lines properly.int total = 0; foreach(String trans in rtb.Lines){ //single transmission in trans total += s.Length; ColorizationInfo temp = new ColorizationInfo(trans); Colorize(rtbDoc, temp, total); // colors a line }
                  Do you thing something like this would work? Of course I didn't go through the parsing like you did, but you get the main idea here. Scott P

                  "Run for your life from any man who tells you that money is evil. That sentence is the leper's bell of an approaching looter." --Ayn Rand

                  S Offline
                  S Offline
                  solutionsville
                  wrote on last edited by
                  #8

                  That worked. Thanks for the help!

                  1 Reply Last reply
                  0
                  Reply
                  • Reply as topic
                  Log in to reply
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes


                  • Login

                  • Don't have an account? Register

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • World
                  • Users
                  • Groups