Advertisement
tolikpunkoff

NewLineConverter v 0.1

Jul 13th, 2017
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.31 KB | None | 0 0
  1. public enum NewLineType : byte { Unknow = 0, Mixed = 1, LF = 10, CR = 13, CRLF = 14 };
  2.     class NewLineConverter
  3.     {        
  4.         public bool Replaced = false;
  5.         public bool GenerateExeption = false;
  6.        
  7.         public NewLineType GetInfo(string Data)
  8.         {
  9.             NewLineType Ret = NewLineType.Unknow;
  10.             string[] CRLFsep = new string[] { "\r\n" };            
  11.            
  12.             string[] CRLFBuf = Data.Split(CRLFsep,StringSplitOptions.None);
  13.  
  14.             if (CRLFBuf.Length > 1) //CR+LF обнаружен
  15.             {
  16.                 foreach (string s in CRLFBuf) //проверяем каждую строчку на предмет CR или LF
  17.                 {
  18.                     if (s.Contains("\r") || s.Contains("\n")) //остались CR и LF
  19.                     {
  20.                         //смешанные переводы строки
  21.                         Ret = NewLineType.Mixed;
  22.                         break;
  23.                     }
  24.                 }
  25.  
  26.                 //других концов строк не найдено - все строки CR+LF
  27.                 if (Ret != NewLineType.Mixed) Ret = NewLineType.CRLF;
  28.             }
  29.             else //Строк, оканчивающихся CR+LF нет
  30.             {                                
  31.                 //вразнобой присутствуют CR и LF - смешаные переводы строк
  32.                 if (Data.Contains("\r") && Data.Contains("\n"))
  33.                 {
  34.                     Ret = NewLineType.Mixed;
  35.                 }
  36.                 else
  37.                 {
  38.                     if (Data.Contains("\r")) Ret = NewLineType.CR; //CR
  39.                     if (Data.Contains("\n")) Ret = NewLineType.LF; //LF
  40.                 }
  41.             }
  42.             return Ret;
  43.         }
  44.  
  45.         public string ReplaceLineEnd(string Data, NewLineType LineEndType)
  46.         {
  47.             string Ret = "";
  48.  
  49.             //Вместо возможных концов строк заданы значения
  50.             //Mixed или Unknow, которые нужны только для информации
  51.             if ((LineEndType == NewLineType.Mixed) || (LineEndType == NewLineType.Unknow))
  52.             {
  53.                 if (GenerateExeption)
  54.                 {
  55.                     throw new System.ArgumentException("LineEndType cannot be Mixed or Unknow");
  56.                 }
  57.                 Replaced = false;
  58.                 return Data;
  59.             }
  60.  
  61.             switch (LineEndType)
  62.             {
  63.                 case NewLineType.CR: //замена концов строк на CR
  64.                     {
  65.                         Ret = Data.Replace("\r\n", "\r"); // CR+LF to CR
  66.                         Ret = Ret.Replace("\n", "\r"); // LF to CR
  67.                         break;
  68.                     }
  69.                
  70.                 case NewLineType.LF: //замена концов строк на LF
  71.                     {
  72.                         Ret = Data.Replace("\r\n", "\n"); // CR+LF to LF
  73.                         Ret = Ret.Replace("\r", "\n"); // CR to LF
  74.                         break;
  75.                     }
  76.                
  77.                 case NewLineType.CRLF : //замена концов строк на CR+LF
  78.                     {                        
  79.                         //мало ли файл типа Mixed, где есть уже некоторые
  80.                         //строки c CR+LF концами
  81.                         string[] CRLFsep = new string[] { "\r\n" }; //задаем CR+LF как разделитель для метода Split
  82.                         string[] CRLFBuf = Data.Split(CRLFsep, StringSplitOptions.None); //делим строку на части                        
  83.  
  84.                         for (int i=0; i < CRLFBuf.Length;i++ ) //проходим по всем частям
  85.                         {
  86.                             CRLFBuf[i] = CRLFBuf[i].Replace("\r", "\r\n");
  87.                             CRLFBuf[i] = CRLFBuf[i].Replace("\n", "\r\n");
  88.                         }
  89.                         Ret = String.Join("\r\n", CRLFBuf);
  90.                         break;
  91.                     }
  92.  
  93.             }
  94.             Replaced = true;
  95.             return Ret;
  96.         }
  97.        
  98.  
  99.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement