Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public enum NewLineType : byte { Unknow = 0, Mixed = 1, LF = 10, CR = 13, CRLF = 14 };
- class NewLineConverter
- {
- public bool Replaced = false;
- public bool GenerateExeption = false;
- public NewLineType GetInfo(string Data)
- {
- NewLineType Ret = NewLineType.Unknow;
- string[] CRLFsep = new string[] { "\r\n" };
- string[] CRLFBuf = Data.Split(CRLFsep,StringSplitOptions.None);
- if (CRLFBuf.Length > 1) //CR+LF обнаружен
- {
- foreach (string s in CRLFBuf) //проверяем каждую строчку на предмет CR или LF
- {
- if (s.Contains("\r") || s.Contains("\n")) //остались CR и LF
- {
- //смешанные переводы строки
- Ret = NewLineType.Mixed;
- break;
- }
- }
- //других концов строк не найдено - все строки CR+LF
- if (Ret != NewLineType.Mixed) Ret = NewLineType.CRLF;
- }
- else //Строк, оканчивающихся CR+LF нет
- {
- //вразнобой присутствуют CR и LF - смешаные переводы строк
- if (Data.Contains("\r") && Data.Contains("\n"))
- {
- Ret = NewLineType.Mixed;
- }
- else
- {
- if (Data.Contains("\r")) Ret = NewLineType.CR; //CR
- if (Data.Contains("\n")) Ret = NewLineType.LF; //LF
- }
- }
- return Ret;
- }
- public string ReplaceLineEnd(string Data, NewLineType LineEndType)
- {
- string Ret = "";
- //Вместо возможных концов строк заданы значения
- //Mixed или Unknow, которые нужны только для информации
- if ((LineEndType == NewLineType.Mixed) || (LineEndType == NewLineType.Unknow))
- {
- if (GenerateExeption)
- {
- throw new System.ArgumentException("LineEndType cannot be Mixed or Unknow");
- }
- Replaced = false;
- return Data;
- }
- switch (LineEndType)
- {
- case NewLineType.CR: //замена концов строк на CR
- {
- Ret = Data.Replace("\r\n", "\r"); // CR+LF to CR
- Ret = Ret.Replace("\n", "\r"); // LF to CR
- break;
- }
- case NewLineType.LF: //замена концов строк на LF
- {
- Ret = Data.Replace("\r\n", "\n"); // CR+LF to LF
- Ret = Ret.Replace("\r", "\n"); // CR to LF
- break;
- }
- case NewLineType.CRLF : //замена концов строк на CR+LF
- {
- //мало ли файл типа Mixed, где есть уже некоторые
- //строки c CR+LF концами
- string[] CRLFsep = new string[] { "\r\n" }; //задаем CR+LF как разделитель для метода Split
- string[] CRLFBuf = Data.Split(CRLFsep, StringSplitOptions.None); //делим строку на части
- for (int i=0; i < CRLFBuf.Length;i++ ) //проходим по всем частям
- {
- CRLFBuf[i] = CRLFBuf[i].Replace("\r", "\r\n");
- CRLFBuf[i] = CRLFBuf[i].Replace("\n", "\r\n");
- }
- Ret = String.Join("\r\n", CRLFBuf);
- break;
- }
- }
- Replaced = true;
- return Ret;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement