1. C# / Говнокод #2986

    +115.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    class TReadWrapper<TItemType>
        {
    		public static object item(string ItemString)
            {
    			if (typeof(TItemType) == typeof(double))
    				return Convert.ToDouble(ItemString);
                TDbg.Assert(false);
                return null;
            }
        };
    
        class TRead<TItemType>
        {
    		public static TItemType item(StreamReader BinaryStream)
            {
    			string ItemString = BinaryStream.ReadLine();
    			if (ItemString == null)
    				throw new Exception();
    			return (TItemType)TReadWrapper<TItemType>.item(ItemString);
            }
        };
    
    	class TFileToList<TListItem> : List<TListItem>
        {
            public TFileToList(string FileName)
            {
    			if(typeof(TListItem)==typeof(char))
    			{
    				StreamReader file = new StreamReader(FileName, Encoding.Unicode);
    				string FileData = file.ReadToEnd();
    				foreach (char item in FileData)
    					this.Add((TListItem)(object)item);
    				file.Close();
    				return;
    			};
    
    			StreamReader fileSource = new StreamReader(FileName, Encoding.Unicode);
    			try
                {
    				for (;;)
    					this.Add(TRead<TListItem>.item(fileSource));
    			}
    			catch
    			{
    			};
    			fileSource.Close();
            }
        }
    
        class TListToFile<TListItem>
        {
            static public void rewrite(string NameOfDestinationFile, List<TListItem> Source)
            {
    			if(typeof(TListItem)==typeof(char))
    			{
    				StreamWriter file = new StreamWriter(NameOfDestinationFile, false, Encoding.Unicode);
    				foreach (TListItem item in Source)
    					file.Write(item);
    				file.Flush();
    				file.Close();
    				return;
    			};
    
    			StreamWriter fileDestination = new StreamWriter(NameOfDestinationFile, false, Encoding.Unicode);
    			foreach (TListItem item in Source)
    				fileDestination.WriteLine(Convert.ToString(item));
    			fileDestination.Flush();
    			fileDestination.Close();
            }
        }

    Запостил: Говногость, 11 Апреля 2010

    Комментарии (23) RSS

    • да че за поебень?
      сколько можно постить УГ?
      Ответить
    • Чё не так? Все нормально.
      Ответить
      • TDbg.Assert - велосипед
        Ответить
      • Управление логикой программы, через исключения.
        Ответить
      • Какая-то кривая логика с
        if(typeof(TListItem)==typeof(char))
        Ответить
      • Происходят регулярные упаковки/распаковки в object.
        Ответить
      • И вообще какая-то надуманная хюня
        Ответить
    • Большой... читать до конца лень было. Итог: куча лишнего кода, который писал нуб.
      Ответить
      • Слабо написать не нубскую замену?
        Ответить
        • Не слабо.
          public class FileList<T>: IList<T>, IDisposable where T: IConvertible
              {
                  private List<Item> _poss;
                  private static object _sync = new object();
                  private FileStream _strm;
          
                  public int Count
                  {get {return _poss.Count;}}
          
                  public FileList(string file)
                  {
                      _stream = new FileStream(file, FileMode.Create);
                      _poss = new List<Item>();
          	   }
              
                  public void Add(T item)
                  {
                      lock (_sync)
                      {
                          var buf = Encoding.Default.GetBytes(item.ToString() + Environment.NewLine);
                          var itm = new Item(_strm.Position, buf.Length);
                          _poss.Add(itm);
                          _strm.Write(buf, 0, buf.Length);
                          _strm.Flush();
                      }
                  }
          
                  public void AddRange(IEnumerable<T> items)
                  {
                      foreach (T item in items)
                      {
                          Add(item);
                      }
                  }
          
                  public void Dispose()
                  {
                      if (_strm != null)
                      {
                          _strm.Close();
                      }
                  }
          
                  public T this[int index]
                  {
                      get
                      {
                          lock (_sync)
                          {
                              var currentPos = _strm.Position;
                              var itm = _poss[index];
                              _strm.Position = itm.Position;
                              var buf = new byte[itm.Size];
                              _strm.Read(buf, 0, itm.Size);
                              _strm.Position = currentPos;
                              return (T)Convert.ChangeType(Encoding.Default.GetString(buf, 0, buf.Length), typeof(T));
                          }
                      }
                      set { throw new NotImplementedException(); }
                  }
          
                  public IEnumerator<T> GetEnumerator()
                  { return new ListFileEnumerator(this); }
          
                  IEnumerator IEnumerable.GetEnumerator()
                  {return GetEnumerator();}


          Это не весь код, но думаю принцип понятен
          Ответить
          • Написано на порядок лучше, но мне кажется, что вышеприведенный код и твой производят различные действия.
            Говнокодерный код "Перегоняет из списка в файл и обратно".
            Код вселенской красоты "Добавляет одновременно в список и файл".
            Ответить
            • Нет, в список он не добавляет, добавляет только в файл. Лист _poss - индексный, для быстрого поиска по файлу.
              Ответить
      • спорим, ты так не сможешь, даже если сильно захочешь...
        Ответить
    • Ещё не обнаруживается ошибка конвертирования Convert.ToDouble.
      Ответить
    • А С++ когда завезут?
      Ответить

    Добавить комментарий