public List <TBLForSpecificColumn> tbl = new List <TBLForSpecificColumn>(); //zmienna wynikowa public string readFile(string fileName, string newFileName, HashSet <string> keysToDisplay, HashSet <string> namesToDisplay) { var lines = File.ReadLines(fileName); //zczytanie wszystkich lini pliku Boolean start = false; //zmienna start odpowiedzialna za uruchomienie alorytmu analizy pliku string startString = FileManagement.StartString; // zmienna zawierajaca ciag znakow odpowiedzialny za rozpoczecie analizy string endString = FileManagement.EndString; // zmienna zawierajaca ciag znakow odpowiedzialny za zatrzymanie analizy pliku string key = ""; List <string> names = new List <string>(); List <string> values = new List <string>(); string value = ""; string from = ""; string to = ""; string name = ""; int idOfFeatures = 1; List <SpecificColumn> listOfValues = new List <SpecificColumn>(); //Lista przechowujaca kolejne wiersze Features foreach (var line in lines) { string singleLine = line.Trim(); // usuniecie bialych spacji z poczatku i konca lini singleLine = Regex.Replace(singleLine, " {2,}", "\t"); //zastapienie wiecej niz 2 spacji pod rzad znakiem tabulacji string[] splitLine = singleLine.Split('\t'); // rozdzielenie jako elementy tablicy lini na podstawie znaku tabulacji if (splitLine[0].Contains(endString)) //jezeli linia zawiera ciag znakow konca algorytmu zmienna start = false { start = false; values.Add(value); if (keysToDisplay.Count == 0 || keysToDisplay.Contains(key)) { SpecificColumn column = new SpecificColumn(); //stworzenie nowego obiektu SpecificColumn z aktualnymi wartosciami column.From = from; column.Key = key; column.To = to; column.Name = names; column.Value = values; listOfValues.Add(column); } names = new List <string>(); values = new List <string>(); value = ""; key = ""; TBLForSpecificColumn tblTemp = new TBLForSpecificColumn(); //stworzenie obiektu TBL tblTemp.mainName = "Features" + idOfFeatures.ToString(); idOfFeatures++; listOfValues.ForEach(element => tblTemp.columns.Add(element)); this.tbl.Add(tblTemp); // dodanie nowego TBL do wszystkich obiektow TBL listOfValues = new List <SpecificColumn>(); } if (start) { if (splitLine.Length > 1) // jezeli linia zawiera slowo kluczowe plus wartosci to { if ((key != "" && keysToDisplay.Count == 0) || (key != "" && keysToDisplay.Contains(key))) //jezeli klucz nie jest pusty { values.Add(value); //dodaj do listy wartosci aktualna wartosc SpecificColumn column = new SpecificColumn(); //stworzenie nowego obiektu specific column odpowiadajacego wierszowi np. CDS column.From = from; column.Key = key; column.To = to; column.Name = names; column.Value = values; listOfValues.Add(column); } key = splitLine[0]; //zczytanie nowego klucz np. CDS names = new List <string>(); values = new List <string>(); value = ""; var res = this.getNumbers(splitLine[1]); //from = splitLine[1].Substring(0, splitLine[1].IndexOf(".")); //to = splitLine[1].Substring(splitLine[1].LastIndexOf(".") + 1); //from = from.Replace("\\D+", ""); //from = from.Replace("(", ""); //to = to.Replace("\\D+", ""); //from = this.replaceAll(from); //to = this.replaceAll(to); //Regex pattern = new Regex("[a-zA-Z]"); //to = pattern.Replace(to, ""); //from = pattern.Replace(from, ""); from = res[0]; to = res[1]; } else { if (splitLine[0].First() == '/' && splitLine[0].Contains('=')) { name = splitLine[0].Substring(1, splitLine[0].IndexOf('=') - 1); if (namesToDisplay.Count == 0 || namesToDisplay.Contains(name)) { names.Add(name); if (value != "") { values.Add(value); } value = this.replaceAll(splitLine[0].Substring(splitLine[0].IndexOf('=') + 1)); } } else { if (namesToDisplay.Contains(name)) { value += " " + this.replaceAll(splitLine[0]); } } } } if (splitLine[0].Contains(startString)) // jesli linia zawiera ciag znakow rozpoczynajacy analize pliku { start = true; // zmienna start jest rowna true } } //koniec petli foreach //for (int i = 0; i < values.Count; i++) // Console.WriteLine(names[i] + " ==> " + values[i]); string results = ""; foreach (var tbl in this.tbl) //zczytanie wszystkich features do jednej zmiennej w celu jej zapisania { results += tbl.ToString() + "\n"; } if (!newFileName.Contains(".tbl")) //dodanie do nowego pliku rozszerzenia tbl jesli takowego nie posiada { newFileName += ".tbl"; } if (File.Exists(newFileName)) //jezeli plik istnieje o podanej nazwie { File.Delete(newFileName); //zostanie nadpisany } using (FileStream fs = File.Create(newFileName)) { Byte[] info = new UTF8Encoding(true).GetBytes(results); //zmiana zmiennej wynikowej na tablice bajtow fs.Write(info, 0, info.Length); //zapisanie wynikow do pliku System.Windows.Forms.MessageBox.Show("Created"); //wyswietlenie okna ze plik zostal utworzony } return(""); }
public string readFile(string fileName, string newFileName) { var lines = File.ReadLines(fileName); Boolean start = false; string startString = "FEATURES"; string endString = "//"; string key = ""; List <string> names = new List <string>(); List <string> values = new List <string>(); string value = ""; string from = ""; string to = ""; int idOfFeatures = 1; List <SpecificColumn> listOfValues = new List <SpecificColumn>(); foreach (var line in lines) { string singleLine = line.Trim(); singleLine = Regex.Replace(singleLine, " {2,}", "\t"); string[] splitLine = singleLine.Split('\t'); if (splitLine[0].Contains(endString)) { start = false; TBLForSpecificColumn tblTemp = new TBLForSpecificColumn(); tblTemp.mainName = "Features" + idOfFeatures.ToString(); idOfFeatures++; listOfValues.ForEach(element => tblTemp.columns.Add(element)); this.tbl.Add(tblTemp); listOfValues.Clear(); } if (start) { if (splitLine.Length > 1) { if (value != "") { values.Add(value); } if (key != "") { // Console.WriteLine(key + " ==> " + value); listOfValues.Add(new SpecificColumn( key, from, to, names, values )); names.Clear(); values.Clear(); value = ""; } if (!splitLine[0].Contains("misc_featur")) { //Console.WriteLine(splitLine.Length.ToString()); key = splitLine[0]; from = splitLine[1].Substring(0, splitLine[1].IndexOf(".")); to = splitLine[1].Substring(splitLine[1].LastIndexOf(".") + 1); from = from.Replace("\\D+", ""); from = from.Replace("(", ""); to = to.Replace("\\D+", ""); from = this.replaceAll(from); to = this.replaceAll(to); Regex pattern = new Regex("[a-zA-Z]"); to = pattern.Replace(to, ""); from = pattern.Replace(from, ""); } } else { if (splitLine[0].Contains("/") && splitLine[0].Contains("=")) { if (value != "") { values.Add(value); } value = ""; names.Add(this.replaceAll(splitLine[0].Substring(0, splitLine[0].IndexOf("=")))); splitLine[0] = splitLine[0].Substring(splitLine[0].IndexOf("=") + 1); splitLine[0] = this.replaceAll(splitLine[0]); } value += splitLine[0]; } } if (splitLine[0].Contains(startString)) { start = true; } } //for (int i = 0; i < values.Count; i++) // Console.WriteLine(names[i] + " ==> " + values[i]); string results = ""; foreach (var tbl in this.tbl) { results += tbl.ToString() + "\n"; } if (!newFileName.Contains(".tbl")) { newFileName += ".tbl"; } if (File.Exists(newFileName)) { File.Delete(newFileName); } using (FileStream fs = File.Create(newFileName)) { Byte[] info = new UTF8Encoding(true).GetBytes(results); fs.Write(info, 0, info.Length); System.Windows.Forms.MessageBox.Show("Created"); } return(""); }