Jump to content

C# store all strings between strings

blizzardchris
Go to solution Solved by Mr_KoKa,

As an Idea, you could try Regexp, but faster solution would be to parse file yourself like this:

using System;
using System.IO;

namespace HelloWorld
{
  class Hello 
  {
    static void Main() 
    {
      try {
        string text = File.ReadAllText("data.file");
        
        int spos = -1;
        int epos;
        
        while((spos = text.IndexOf("point [", spos + 1)) != -1){
          epos = text.IndexOf("]", spos);
          if(epos != -1){
            Console.WriteLine("Found: " + text.Substring(spos, epos - spos + 1));
            spos = epos + 1;
          } else {
            Console.WriteLine("No ending bracket found.");
            break;
          }
        }
        
      } catch(Exception e){
        Console.WriteLine(e.Message);
      }
    }
  }
}

Try it here: https://repl.it/GRDS/2

 

Code searches for "point [" and then from the position it found it (you could add +7 so it would skip that string it just found) it looks for "]"

When it find "]" it gets substring from the posittion it found "point [" on to the position it found "]" on. And then loop starts again from the position it found "]" at.

 

Thet being said, you would need to make sure yourself if parsed value is valid, if file would missing closing bracket of point it would parse until closest closing bracket, so the resulting data would be much more then bunch of numbers. Regex can skip such invalid point but it is probably better to know if such point exists and not try to parse file further. If the file is generated then possibility of it being invalid is small.

Hey peoples

 

ive been trying to fiure out how to store an array or list of  strings that is between two specified trings in a file 

the file looks ike this

 

#Inventor V2.1 ascii

SoSeparator {
  fields [ SFEnum renderCaching, SFEnum boundingBoxCaching, SFEnum renderCulling, SFEnum pickCulling ]
  Switch {
    whichChild 1
    Separator {
      DrawStyle {
        lineWidth 6
      }
      BaseColor {
        rgb 1 0 0
      }
      Coordinate3 {
      }
      Separator {
        Material {
          ambientColor 255 0 0
          diffuseColor 255 0 0
          specularColor 255 0 0
        }
        Transform {
        }
        Sphere {
          radius 0
        }
      }
      Switch {
        whichChild 1
        Separator {
          Transform {
          }
          ShapeHints {
            vertexOrdering COUNTERCLOCKWISE
            shapeType UNKNOWN_SHAPE_TYPE
          }
          IndexedFaceSet {
          }
        }
        DEF +0 Separator {
        }
      }
      Switch {
        whichChild 1
        Separator {
          PickStyle {
            style UNPICKABLE
          }
          Transform {
          }
          IndexedLineSet {
          }
        }
        USE +0
      }
    }
    USE +0
  }
  SoHighlightSelectionManager {
    fields [ SFEnum renderCaching, SFEnum boundingBoxCaching, SFEnum renderCulling, SFEnum pickCulling ]
    Separator {
      Coordinate3 {
      }
    }
  }
  Environment {
    ambientIntensity 0.80000001
    ambientColor 1 1 1
  }
  Units {
    units MILLIMETERS
  }
  Complexity {
    value 0.5
    textureQuality 0.40000001
  }
  Material {
    diffuseColor 1 1 1
  }
  ShapeHints {
    shapeType UNKNOWN_SHAPE_TYPE
  }
  Translation {
    translation -2000 -2000 -2320
  }
  Switch {
    whichChild 0
    Separator {
    }
    Separator {
      SoDraggerBox {
        fields [ SFEnum renderCaching, SFEnum boundingBoxCaching, SFEnum renderCulling, SFEnum pickCulling ]
        BaseColor {
          rgb 0.80000001 0.79000002 0.79000002
        }
        Coordinate3 {
          point [ -500 -500 500,
              500 -500 500,
              500 500 500,
              -500 500 500,
              -500 -500 -500,
              500 -500 -500,
              500 500 -500,
              -500 500 -500 ]
        }
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, 0, -1, 4, 5,
              6, 7, 4, -1, 0, 4, -1, 1,
              5, -1, 2, 6, -1, 3, 7, -1 ]
        }
        Separator {
          Transform {
            translation 0 0 0
          }
          Translate1Dragger {
            translation -500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +1 Transform {
                translation -37.5 0 0
                rotation 0 0 1  1.5707964
                scaleFactor 75 75 75
              }
              DEF +2 Cube {
              }
            }
            translatorActive 
            Separator {
              DEF +3 Material {
                diffuseColor 1 0 0
              }
              USE +1
              USE +2
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
          }
          Translate1Dragger {
            translation 500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +4 Transform {
                translation 37.5 0 0
                rotation 0 0 1  4.712389
                scaleFactor 75 75 75
              }
              DEF +5 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +4
              USE +5
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 0 1  1.5707964
          }
          Translate1Dragger {
            translation -500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +6 Transform {
                translation -37.5 0 0
                rotation 0 0 1  1.5707964
                scaleFactor 75 75 75
              }
              DEF +7 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +6
              USE +7
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 0 1  1.5707964
          }
          Translate1Dragger {
            translation 500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +8 Transform {
                translation 37.5 0 0
                rotation 0 0 1  4.712389
                scaleFactor 75 75 75
              }
              DEF +9 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +8
              USE +9
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 1 0  4.712389
          }
          Translate1Dragger {
            translation -500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +10 Transform {
                translation -37.5 0 0
                rotation 0 0 1  1.5707964
                scaleFactor 75 75 75
              }
              DEF +11 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +10
              USE +11
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 1 0  4.712389
          }
          Translate1Dragger {
            translation 500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +12 Transform {
                translation 37.5 0 0
                rotation 0 0 1  4.712389
                scaleFactor 75 75 75
              }
              DEF +13 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +12
              USE +13
            }
          }
        }
      }
    }
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  Separator {
    DEF +14 Texture2 {
      wrapS REPEAT
      wrapT REPEAT
      model REPLACE
    }
  }
  Separator {
  }
  Separator {
    DEF Entity Separator {
      DEF +15 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +15
        Switch {
          whichChild 0
          DEF +16 Material {
            diffuseColor 0.5 0.23046875 0
          }
          DEF +17 Material {
            diffuseColor 1 0 0
          }
        }
        Coordinate3 {
          point [ 0 0 2439.9875,
              3954.9585 0 2439.9875,
              3954.9585 0 2199.9773,
              0 0 2199.9773,
              0 45.045311 2439.9875,
              3954.9585 45.045311 2439.9875,
              3954.9585 45.045311 2199.9773,
              0 45.045311 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        DEF +18 Material {
          diffuseColor 0.25 0.11523438 0
        }
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
    DEF Entity Separator {
      DEF +19 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +19
        Switch {
          whichChild 0
          USE +16
          USE +17
        }
        Coordinate3 {
          point [ 4000.0039 0 2439.9875,
              4000.0039 4000.0039 2439.9875,
              4000.0039 4000.0039 2199.9773,
              4000.0039 0 2199.9773,
              3954.9585 0 2439.9875,
              3954.9585 4000.0039 2439.9875,
              3954.9585 4000.0039 2199.9773,
              3954.9585 0 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        USE +18
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
    DEF Entity Separator {
      DEF +20 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +20
        Switch {
          whichChild 0
          USE +16
          USE +17
        }
        Coordinate3 {
          point [ 4000.0039 4000.0039 2439.9875,
              0 4000.0039 2439.9875,
              0 4000.0039 2199.9773,
              4000.0039 4000.0039 2199.9773,
              4000.0039 3954.9585 2439.9875,
              0 3954.9585 2439.9875,
              0 3954.9585 2199.9773,
              4000.0039 3954.9585 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        USE +18
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
    DEF Entity Separator {
      DEF +21 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +21
        Switch {
          whichChild 0
          USE +16
          USE +17
        }
        Coordinate3 {
          point [ 0 4000.0039 2439.9875,
              0 0 2439.9875,
              0 0 2199.9773,
              0 4000.0039 2199.9773,
              45.045311 4000.0039 2439.9875,
              45.045311 0 2439.9875,
              45.045311 0 2199.9773,
              45.045311 4000.0039 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        USE +18
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
  }
  Separator {
    DEF Entity Separator {
      USE +15
    }
    DEF Entity Separator {
      USE +19
    }
    DEF Entity Separator {
      USE +20
    }
    DEF Entity Separator {
      USE +21
    }
  }
  Separator {
    USE +14
  }
  Separator {
    Texture2 {
      wrapS REPEAT
      wrapT REPEAT
      model REPLACE
    }
    TextureCoordinatePlane {
      directionS 0.0027000001 0 0
      directionT 0 0.0027000001 0
    }
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Switch {
    whichChild 0
    Separator {
    }
    Separator {
      BaseColor {
        rgb 0.38999999 0.57999998 0.93000001
      }
      Coordinate3 {
      }
    }
  }
  Separator {
  }
}


 

so for example  from "point [" then store the string unitl "]" then find the next "point [" and so on im trying to make a 3d viewer for this file type storing these in a list then ill use split on them when generating the verticies.

 

thanks

 

 

THE RIG 

CPU: i7 3770K @ 4.9 COOLER: Kraken X61 MOBO: Z77 Sabertooth RAM: Vengeance 16gb @1600 GPU: ASUS ROG Strix GTX 1080 PSU: EVGA Supernova G2 850w SSD: 850 Pro 256Gb    CASE: B/W phantom 410 AUDIO: Kraken 7.1 Chroma MOUSE: Death Adder Chroma KEYBOARD: Black Widow Chroma MONITOR: Triple 23" Apple Cinama Displays   VR: HTC Vive & Oculus Rift DK2 

Link to comment
Share on other sites

Link to post
Share on other sites

As an Idea, you could try Regexp, but faster solution would be to parse file yourself like this:

using System;
using System.IO;

namespace HelloWorld
{
  class Hello 
  {
    static void Main() 
    {
      try {
        string text = File.ReadAllText("data.file");
        
        int spos = -1;
        int epos;
        
        while((spos = text.IndexOf("point [", spos + 1)) != -1){
          epos = text.IndexOf("]", spos);
          if(epos != -1){
            Console.WriteLine("Found: " + text.Substring(spos, epos - spos + 1));
            spos = epos + 1;
          } else {
            Console.WriteLine("No ending bracket found.");
            break;
          }
        }
        
      } catch(Exception e){
        Console.WriteLine(e.Message);
      }
    }
  }
}

Try it here: https://repl.it/GRDS/2

 

Code searches for "point [" and then from the position it found it (you could add +7 so it would skip that string it just found) it looks for "]"

When it find "]" it gets substring from the posittion it found "point [" on to the position it found "]" on. And then loop starts again from the position it found "]" at.

 

Thet being said, you would need to make sure yourself if parsed value is valid, if file would missing closing bracket of point it would parse until closest closing bracket, so the resulting data would be much more then bunch of numbers. Regex can skip such invalid point but it is probably better to know if such point exists and not try to parse file further. If the file is generated then possibility of it being invalid is small.

Link to comment
Share on other sites

Link to post
Share on other sites

6 hours ago, Mr_KoKa said:

As an Idea, you could try Regexp, but faster solution would be to parse file yourself like this:


using System;
using System.IO;

namespace HelloWorld
{
  class Hello 
  {
    static void Main() 
    {
      try {
        string text = File.ReadAllText("data.file");
        
        int spos = -1;
        int epos;
        
        while((spos = text.IndexOf("point [", spos + 1)) != -1){
          epos = text.IndexOf("]", spos);
          if(epos != -1){
            Console.WriteLine("Found: " + text.Substring(spos, epos - spos + 1));
            spos = epos + 1;
          } else {
            Console.WriteLine("No ending bracket found.");
            break;
          }
        }
        
      } catch(Exception e){
        Console.WriteLine(e.Message);
      }
    }
  }
}

Try it here: https://repl.it/GRDS/2

 

Code searches for "point [" and then from the position it found it (you could add +7 so it would skip that string it just found) it looks for "]"

When it find "]" it gets substring from the posittion it found "point [" on to the position it found "]" on. And then loop starts again from the position it found "]" at.

 

Thet being said, you would need to make sure yourself if parsed value is valid, if file would missing closing bracket of point it would parse until closest closing bracket, so the resulting data would be much more then bunch of numbers. Regex can skip such invalid point but it is probably better to know if such point exists and not try to parse file further. If the file is generated then possibility of it being invalid is small.

thanks mate exactly what i was after

THE RIG 

CPU: i7 3770K @ 4.9 COOLER: Kraken X61 MOBO: Z77 Sabertooth RAM: Vengeance 16gb @1600 GPU: ASUS ROG Strix GTX 1080 PSU: EVGA Supernova G2 850w SSD: 850 Pro 256Gb    CASE: B/W phantom 410 AUDIO: Kraken 7.1 Chroma MOUSE: Death Adder Chroma KEYBOARD: Black Widow Chroma MONITOR: Triple 23" Apple Cinama Displays   VR: HTC Vive & Oculus Rift DK2 

Link to comment
Share on other sites

Link to post
Share on other sites

is it an Autocad file?

 

Here is an interesting manual, if you like the idea, you might look at:

 

Creating a Command in AutoCAD® with C#

http://aucache.autodesk.com/au2012/sessionsFiles/2774/2632/handout_2774_CP2774-L.pdf

 

and you might get access to the more structured data within Autocad and create your own plugin for exporting data that you need.

 

The manual is getting old but it should still be relative.

 

If you still want to go with reading the file, it seems like the integrity of the data format is high, and you will not get errors in the file structure. So then I would go for regex solution.

 

Or if you have some extra time to look at the docs and specifications of the file, and if it is possible to define and map this file structure to a class, then write your own parser might be an interesting exercise.

Link to comment
Share on other sites

Link to post
Share on other sites

16 hours ago, tridy said:

is it an Autocad file?

 

Here is an interesting manual, if you like the idea, you might look at:

 

Creating a Command in AutoCAD® with C#

http://aucache.autodesk.com/au2012/sessionsFiles/2774/2632/handout_2774_CP2774-L.pdf

 

and you might get access to the more structured data within Autocad and create your own plugin for exporting data that you need.

 

The manual is getting old but it should still be relative.

 

If you still want to go with reading the file, it seems like the integrity of the data format is high, and you will not get errors in the file structure. So then I would go for regex solution.

 

Or if you have some extra time to look at the docs and specifications of the file, and if it is possible to define and map this file structure to a class, then write your own parser might be an interesting exercise.

yer its for a cad that i cant modify but the only 3d file it wil export is this .iv file this is how its looking so far 

 

Capture.PNG

 

but its placed all the roof trusses in one pile insted of on the frames and upright this is a different file than the one i used as an example but still the same .iv format

THE RIG 

CPU: i7 3770K @ 4.9 COOLER: Kraken X61 MOBO: Z77 Sabertooth RAM: Vengeance 16gb @1600 GPU: ASUS ROG Strix GTX 1080 PSU: EVGA Supernova G2 850w SSD: 850 Pro 256Gb    CASE: B/W phantom 410 AUDIO: Kraken 7.1 Chroma MOUSE: Death Adder Chroma KEYBOARD: Black Widow Chroma MONITOR: Triple 23" Apple Cinama Displays   VR: HTC Vive & Oculus Rift DK2 

Link to comment
Share on other sites

Link to post
Share on other sites

On 3/14/2017 at 10:46 AM, blizzardchris said:

yer its for a cad that i cant modify but the only 3d file it wil export is this .iv file this is how its looking so far 

 

but its placed all the roof trusses in one pile insted of on the frames and upright this is a different file than the one i used as an example but still the same .iv format

 

Alright, so we are stuck with just the file and we want to get the values between "[" and "]".

 

Here is a parser class with the mocked ReadFileContent method that returns a static string that you have shown.

the lines that are commented out would read the content of the file.

 

The method flattens the file content and then searches for the values within the square brackets:

 

    public class CadFileParser
    {
        public static IEnumerable<string> ParseFileValuesWithinSquareBrackets(string filePath)
        {
            string fileContent = ReadFileContent(filePath);
            var results = new List<string>();
            string oneLineString = Regex.Replace(fileContent, @"\s+", " ");
            MatchCollection matches = Regex.Matches(oneLineString, @"\[(?<result>[^]]*)\]");

            foreach (Match match in matches)
            {
                results.Add(match.Groups["result"].Value);
            }

            return results;
        }

        private static string ReadFileContent(string filePath)
        {
            // string content = File.ReadAllText(filePath);
            // return content;

            return @"
#Inventor V2.1 ascii

SoSeparator {
  fields [ SFEnum renderCaching, SFEnum boundingBoxCaching, SFEnum renderCulling, SFEnum pickCulling ]
  Switch {
    whichChild 1
    Separator {
      DrawStyle {
        lineWidth 6
      }
      BaseColor {
        rgb 1 0 0
      }
      Coordinate3 {
      }
      Separator {
        Material {
          ambientColor 255 0 0
          diffuseColor 255 0 0
          specularColor 255 0 0
        }
        Transform {
        }
        Sphere {
          radius 0
        }
      }
      Switch {
        whichChild 1
        Separator {
          Transform {
          }
          ShapeHints {
            vertexOrdering COUNTERCLOCKWISE
            shapeType UNKNOWN_SHAPE_TYPE
          }
          IndexedFaceSet {
          }
        }
        DEF +0 Separator {
        }
      }
      Switch {
        whichChild 1
        Separator {
          PickStyle {
            style UNPICKABLE
          }
          Transform {
          }
          IndexedLineSet {
          }
        }
        USE +0
      }
    }
    USE +0
  }
  SoHighlightSelectionManager {
    fields [ SFEnum renderCaching, SFEnum boundingBoxCaching, SFEnum renderCulling, SFEnum pickCulling ]
    Separator {
      Coordinate3 {
      }
    }
  }
  Environment {
    ambientIntensity 0.80000001
    ambientColor 1 1 1
  }
  Units {
    units MILLIMETERS
  }
  Complexity {
    value 0.5
    textureQuality 0.40000001
  }
  Material {
    diffuseColor 1 1 1
  }
  ShapeHints {
    shapeType UNKNOWN_SHAPE_TYPE
  }
  Translation {
    translation -2000 -2000 -2320
  }
  Switch {
    whichChild 0
    Separator {
    }
    Separator {
      SoDraggerBox {
        fields [ SFEnum renderCaching, SFEnum boundingBoxCaching, SFEnum renderCulling, SFEnum pickCulling ]
        BaseColor {
          rgb 0.80000001 0.79000002 0.79000002
        }
        Coordinate3 {
          point [ -500 -500 500,
              500 -500 500,
              500 500 500,
              -500 500 500,
              -500 -500 -500,
              500 -500 -500,
              500 500 -500,
              -500 500 -500 ]
        }
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, 0, -1, 4, 5,
              6, 7, 4, -1, 0, 4, -1, 1,
              5, -1, 2, 6, -1, 3, 7, -1 ]
        }
        Separator {
          Transform {
            translation 0 0 0
          }
          Translate1Dragger {
            translation -500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +1 Transform {
                translation -37.5 0 0
                rotation 0 0 1  1.5707964
                scaleFactor 75 75 75
              }
              DEF +2 Cube {
              }
            }
            translatorActive 
            Separator {
              DEF +3 Material {
                diffuseColor 1 0 0
              }
              USE +1
              USE +2
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
          }
          Translate1Dragger {
            translation 500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +4 Transform {
                translation 37.5 0 0
                rotation 0 0 1  4.712389
                scaleFactor 75 75 75
              }
              DEF +5 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +4
              USE +5
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 0 1  1.5707964
          }
          Translate1Dragger {
            translation -500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +6 Transform {
                translation -37.5 0 0
                rotation 0 0 1  1.5707964
                scaleFactor 75 75 75
              }
              DEF +7 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +6
              USE +7
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 0 1  1.5707964
          }
          Translate1Dragger {
            translation 500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +8 Transform {
                translation 37.5 0 0
                rotation 0 0 1  4.712389
                scaleFactor 75 75 75
              }
              DEF +9 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +8
              USE +9
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 1 0  4.712389
          }
          Translate1Dragger {
            translation -500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +10 Transform {
                translation -37.5 0 0
                rotation 0 0 1  1.5707964
                scaleFactor 75 75 75
              }
              DEF +11 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +10
              USE +11
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 1 0  4.712389
          }
          Translate1Dragger {
            translation 500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +12 Transform {
                translation 37.5 0 0
                rotation 0 0 1  4.712389
                scaleFactor 75 75 75
              }
              DEF +13 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +12
              USE +13
            }
          }
        }
      }
    }
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  Separator {
    DEF +14 Texture2 {
      wrapS REPEAT
      wrapT REPEAT
      model REPLACE
    }
  }
  Separator {
  }
  Separator {
    DEF Entity Separator {
      DEF +15 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +15
        Switch {
          whichChild 0
          DEF +16 Material {
            diffuseColor 0.5 0.23046875 0
          }
          DEF +17 Material {
            diffuseColor 1 0 0
          }
        }
        Coordinate3 {
          point [ 0 0 2439.9875,
              3954.9585 0 2439.9875,
              3954.9585 0 2199.9773,
              0 0 2199.9773,
              0 45.045311 2439.9875,
              3954.9585 45.045311 2439.9875,
              3954.9585 45.045311 2199.9773,
              0 45.045311 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        DEF +18 Material {
          diffuseColor 0.25 0.11523438 0
        }
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
    DEF Entity Separator {
      DEF +19 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +19
        Switch {
          whichChild 0
          USE +16
          USE +17
        }
        Coordinate3 {
          point [ 4000.0039 0 2439.9875,
              4000.0039 4000.0039 2439.9875,
              4000.0039 4000.0039 2199.9773,
              4000.0039 0 2199.9773,
              3954.9585 0 2439.9875,
              3954.9585 4000.0039 2439.9875,
              3954.9585 4000.0039 2199.9773,
              3954.9585 0 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        USE +18
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
    DEF Entity Separator {
      DEF +20 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +20
        Switch {
          whichChild 0
          USE +16
          USE +17
        }
        Coordinate3 {
          point [ 4000.0039 4000.0039 2439.9875,
              0 4000.0039 2439.9875,
              0 4000.0039 2199.9773,
              4000.0039 4000.0039 2199.9773,
              4000.0039 3954.9585 2439.9875,
              0 3954.9585 2439.9875,
              0 3954.9585 2199.9773,
              4000.0039 3954.9585 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        USE +18
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
    DEF Entity Separator {
      DEF +21 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +21
        Switch {
          whichChild 0
          USE +16
          USE +17
        }
        Coordinate3 {
          point [ 0 4000.0039 2439.9875,
              0 0 2439.9875,
              0 0 2199.9773,
              0 4000.0039 2199.9773,
              45.045311 4000.0039 2439.9875,
              45.045311 0 2439.9875,
              45.045311 0 2199.9773,
              45.045311 4000.0039 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        USE +18
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
  }
  Separator {
    DEF Entity Separator {
      USE +15
    }
    DEF Entity Separator {
      USE +19
    }
    DEF Entity Separator {
      USE +20
    }
    DEF Entity Separator {
      USE +21
    }
  }
  Separator {
    USE +14
  }
  Separator {
    Texture2 {
      wrapS REPEAT
      wrapT REPEAT
      model REPLACE
    }
    TextureCoordinatePlane {
      directionS 0.0027000001 0 0
      directionT 0 0.0027000001 0
    }
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Switch {
    whichChild 0
    Separator {
    }
    Separator {
      BaseColor {
        rgb 0.38999999 0.57999998 0.93000001
      }
      Coordinate3 {
      }
    }
  }
  Separator {
  }
}
";
        }
    }

And here is how you call it from a C# Console app that outputs the values:

 

    class Program
    {
        static void Main(string[] args)
        {
            IEnumerable<string> values = CadFileParser.ParseFileValuesWithinSquareBrackets(@"c:\Temp\MyFile.iv");
            foreach (string value in values)
            {
                Console.WriteLine(value);
            }
        }
            
    }

the result includes the letter and digit values though. the regex need to be adjusted if you need just the number one.

 

vals.png

 

is that what you are trying to achieve?

Link to comment
Share on other sites

Link to post
Share on other sites

On 15/03/2017 at 10:40 PM, tridy said:

 

Alright, so we are stuck with just the file and we want to get the values between "[" and "]".

 

Here is a parser class with the mocked ReadFileContent method that returns a static string that you have shown.

the lines that are commented out would read the content of the file.

 

The method flattens the file content and then searches for the values within the square brackets:

 


    public class CadFileParser
    {
        public static IEnumerable<string> ParseFileValuesWithinSquareBrackets(string filePath)
        {
            string fileContent = ReadFileContent(filePath);
            var results = new List<string>();
            string oneLineString = Regex.Replace(fileContent, @"\s+", " ");
            MatchCollection matches = Regex.Matches(oneLineString, @"\[(?<result>[^]]*)\]");

            foreach (Match match in matches)
            {
                results.Add(match.Groups["result"].Value);
            }

            return results;
        }

        private static string ReadFileContent(string filePath)
        {
            // string content = File.ReadAllText(filePath);
            // return content;

            return @"
#Inventor V2.1 ascii

SoSeparator {
  fields [ SFEnum renderCaching, SFEnum boundingBoxCaching, SFEnum renderCulling, SFEnum pickCulling ]
  Switch {
    whichChild 1
    Separator {
      DrawStyle {
        lineWidth 6
      }
      BaseColor {
        rgb 1 0 0
      }
      Coordinate3 {
      }
      Separator {
        Material {
          ambientColor 255 0 0
          diffuseColor 255 0 0
          specularColor 255 0 0
        }
        Transform {
        }
        Sphere {
          radius 0
        }
      }
      Switch {
        whichChild 1
        Separator {
          Transform {
          }
          ShapeHints {
            vertexOrdering COUNTERCLOCKWISE
            shapeType UNKNOWN_SHAPE_TYPE
          }
          IndexedFaceSet {
          }
        }
        DEF +0 Separator {
        }
      }
      Switch {
        whichChild 1
        Separator {
          PickStyle {
            style UNPICKABLE
          }
          Transform {
          }
          IndexedLineSet {
          }
        }
        USE +0
      }
    }
    USE +0
  }
  SoHighlightSelectionManager {
    fields [ SFEnum renderCaching, SFEnum boundingBoxCaching, SFEnum renderCulling, SFEnum pickCulling ]
    Separator {
      Coordinate3 {
      }
    }
  }
  Environment {
    ambientIntensity 0.80000001
    ambientColor 1 1 1
  }
  Units {
    units MILLIMETERS
  }
  Complexity {
    value 0.5
    textureQuality 0.40000001
  }
  Material {
    diffuseColor 1 1 1
  }
  ShapeHints {
    shapeType UNKNOWN_SHAPE_TYPE
  }
  Translation {
    translation -2000 -2000 -2320
  }
  Switch {
    whichChild 0
    Separator {
    }
    Separator {
      SoDraggerBox {
        fields [ SFEnum renderCaching, SFEnum boundingBoxCaching, SFEnum renderCulling, SFEnum pickCulling ]
        BaseColor {
          rgb 0.80000001 0.79000002 0.79000002
        }
        Coordinate3 {
          point [ -500 -500 500,
              500 -500 500,
              500 500 500,
              -500 500 500,
              -500 -500 -500,
              500 -500 -500,
              500 500 -500,
              -500 500 -500 ]
        }
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, 0, -1, 4, 5,
              6, 7, 4, -1, 0, 4, -1, 1,
              5, -1, 2, 6, -1, 3, 7, -1 ]
        }
        Separator {
          Transform {
            translation 0 0 0
          }
          Translate1Dragger {
            translation -500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +1 Transform {
                translation -37.5 0 0
                rotation 0 0 1  1.5707964
                scaleFactor 75 75 75
              }
              DEF +2 Cube {
              }
            }
            translatorActive 
            Separator {
              DEF +3 Material {
                diffuseColor 1 0 0
              }
              USE +1
              USE +2
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
          }
          Translate1Dragger {
            translation 500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +4 Transform {
                translation 37.5 0 0
                rotation 0 0 1  4.712389
                scaleFactor 75 75 75
              }
              DEF +5 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +4
              USE +5
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 0 1  1.5707964
          }
          Translate1Dragger {
            translation -500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +6 Transform {
                translation -37.5 0 0
                rotation 0 0 1  1.5707964
                scaleFactor 75 75 75
              }
              DEF +7 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +6
              USE +7
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 0 1  1.5707964
          }
          Translate1Dragger {
            translation 500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +8 Transform {
                translation 37.5 0 0
                rotation 0 0 1  4.712389
                scaleFactor 75 75 75
              }
              DEF +9 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +8
              USE +9
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 1 0  4.712389
          }
          Translate1Dragger {
            translation -500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +10 Transform {
                translation -37.5 0 0
                rotation 0 0 1  1.5707964
                scaleFactor 75 75 75
              }
              DEF +11 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +10
              USE +11
            }
          }
        }
        Separator {
          Transform {
            translation 0 0 0
            rotation 0 1 0  4.712389
          }
          Translate1Dragger {
            translation 500 0 0
            translator 
            Separator {
              Material {
                diffuseColor 1 1 0
              }
              DEF +12 Transform {
                translation 37.5 0 0
                rotation 0 0 1  4.712389
                scaleFactor 75 75 75
              }
              DEF +13 Cube {
              }
            }
            translatorActive 
            Separator {
              USE +3
              USE +12
              USE +13
            }
          }
        }
      }
    }
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  ClipPlane {
    on FALSE
  }
  Separator {
    DEF +14 Texture2 {
      wrapS REPEAT
      wrapT REPEAT
      model REPLACE
    }
  }
  Separator {
  }
  Separator {
    DEF Entity Separator {
      DEF +15 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +15
        Switch {
          whichChild 0
          DEF +16 Material {
            diffuseColor 0.5 0.23046875 0
          }
          DEF +17 Material {
            diffuseColor 1 0 0
          }
        }
        Coordinate3 {
          point [ 0 0 2439.9875,
              3954.9585 0 2439.9875,
              3954.9585 0 2199.9773,
              0 0 2199.9773,
              0 45.045311 2439.9875,
              3954.9585 45.045311 2439.9875,
              3954.9585 45.045311 2199.9773,
              0 45.045311 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        DEF +18 Material {
          diffuseColor 0.25 0.11523438 0
        }
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
    DEF Entity Separator {
      DEF +19 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +19
        Switch {
          whichChild 0
          USE +16
          USE +17
        }
        Coordinate3 {
          point [ 4000.0039 0 2439.9875,
              4000.0039 4000.0039 2439.9875,
              4000.0039 4000.0039 2199.9773,
              4000.0039 0 2199.9773,
              3954.9585 0 2439.9875,
              3954.9585 4000.0039 2439.9875,
              3954.9585 4000.0039 2199.9773,
              3954.9585 0 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        USE +18
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
    DEF Entity Separator {
      DEF +20 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +20
        Switch {
          whichChild 0
          USE +16
          USE +17
        }
        Coordinate3 {
          point [ 4000.0039 4000.0039 2439.9875,
              0 4000.0039 2439.9875,
              0 4000.0039 2199.9773,
              4000.0039 4000.0039 2199.9773,
              4000.0039 3954.9585 2439.9875,
              0 3954.9585 2439.9875,
              0 3954.9585 2199.9773,
              4000.0039 3954.9585 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        USE +18
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
    DEF Entity Separator {
      DEF +21 DrawStyle {
        style FILLED
      }
      Separator {
        ShapeHints {
          vertexOrdering COUNTERCLOCKWISE
          shapeType UNKNOWN_SHAPE_TYPE
          faceType UNKNOWN_FACE_TYPE
        }
        USE +21
        Switch {
          whichChild 0
          USE +16
          USE +17
        }
        Coordinate3 {
          point [ 0 4000.0039 2439.9875,
              0 0 2439.9875,
              0 0 2199.9773,
              0 4000.0039 2199.9773,
              45.045311 4000.0039 2439.9875,
              45.045311 0 2439.9875,
              45.045311 0 2199.9773,
              45.045311 4000.0039 2199.9773 ]
        }
        IndexedFaceSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
        USE +18
        IndexedLineSet {
          coordIndex [ 0, 1, 2, 3, -1, 7, 6, 5,
              4, -1, 3, 2, 6, 7, -1, 4,
              5, 1, 0, -1, 4, 0, 3, 7,
              -1, 1, 5, 6, 2, -1 ]
        }
      }
    }
  }
  Separator {
    DEF Entity Separator {
      USE +15
    }
    DEF Entity Separator {
      USE +19
    }
    DEF Entity Separator {
      USE +20
    }
    DEF Entity Separator {
      USE +21
    }
  }
  Separator {
    USE +14
  }
  Separator {
    Texture2 {
      wrapS REPEAT
      wrapT REPEAT
      model REPLACE
    }
    TextureCoordinatePlane {
      directionS 0.0027000001 0 0
      directionT 0 0.0027000001 0
    }
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Separator {
    USE +14
  }
  Separator {
  }
  Switch {
    whichChild 0
    Separator {
    }
    Separator {
      BaseColor {
        rgb 0.38999999 0.57999998 0.93000001
      }
      Coordinate3 {
      }
    }
  }
  Separator {
  }
}
";
        }
    }

And here is how you call it from a C# Console app that outputs the values:

 


    class Program
    {
        static void Main(string[] args)
        {
            IEnumerable<string> values = CadFileParser.ParseFileValuesWithinSquareBrackets(@"c:\Temp\MyFile.iv");
            foreach (string value in values)
            {
                Console.WriteLine(value);
            }
        }
            
    }

the result includes the letter and digit values though. the regex need to be adjusted if you need just the number one.

 

vals.png

 

is that what you are trying to achieve?

thanks for that, only when i was targeting a specific type at a time eg point 3 i was able to store that in an array of point 3s each member of the array was another set of verticies for an object and same for other values i needed

THE RIG 

CPU: i7 3770K @ 4.9 COOLER: Kraken X61 MOBO: Z77 Sabertooth RAM: Vengeance 16gb @1600 GPU: ASUS ROG Strix GTX 1080 PSU: EVGA Supernova G2 850w SSD: 850 Pro 256Gb    CASE: B/W phantom 410 AUDIO: Kraken 7.1 Chroma MOUSE: Death Adder Chroma KEYBOARD: Black Widow Chroma MONITOR: Triple 23" Apple Cinama Displays   VR: HTC Vive & Oculus Rift DK2 

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×