Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как удалить из txt пустую строку? Ъ [D6, Win2k]


FANAT ©   (2005-05-31 07:34:00) 

не могу ни как додуматься как удалить из txt.
вообще подразумевается что приоткрытии документа считывается последнии 4 символа и переводятся в integer....
но бывает иногда что в txt пишется пустая строка Ъ.
вот как бы в планах при открытии удалять эту Ъ - а потом брать 4 символа....
все как бы легко, но не могу избавиться от Ъ.
подскажите пожалуйста...


Alx2   (2005-05-31 09:46:00) [1]

Anatoly Podgoretsky ©   (31.05.05 9:36) [9]

..... $0D,$0A,$1A ?


Anatoly Podgoretsky   (2005-05-31 09:36:00) [2]

Не мешало бы увидеть эту "неправильную" строку в шестнадцатиричном виде.


Alx2   (2005-05-31 09:21:00) [3]

FANAT ©   (31.05.05 9:01) [5]
>оказывается это сложно....


Ничего сложного. Просто то, что я написал впервые - глючное. Так как не проверял на случаях пустая строка + конец файла.

Этот вариант ловит  четыре подряд идущих цифры ['0'..'9'] если они располагаются не далее, чем в трех байтах от конца файла и конвертирует их в integer  :)


 Function ReadLast4DigitsFiltered(Const FileName: String): Integer;
 Const
   BufSize = 7;
 Var
   Buf: Array[1..BufSize] Of char;
   k, CharCount, WasDigits: Integer;
 Begin
   With TFileStream.Create(FileName, fmOpenRead) Do
     Try
       If Size < BufSize Then
         CharCount := Size
       Else
         CharCount := BufSize;
       Seek(Size - CharCount, soFromBeginning);
       If Read(Buf, CharCount) <> CharCount Then
         Raise Exception.Create('Read error');

       WasDigits := 0;
       For k := 1 To BufSize Do
         If Not (Buf[k] In ['0'..'9'])
           Then
           If WasDigits > 0 Then
             Buf[k] := #0
           Else
             Buf[k] := ' '
         Else
           inc(WasDigits);

       If WasDigits <> 4 Then
         Raise Exception.Create('Data error');

       Result := StrToInt(Buf)

     Finally
       Free;
     End;
 End;


Anatoly Podgoretsky   (2005-05-31 09:13:00) [4]

А есть ли мальчик?


Digitman   (2005-05-31 09:07:00) [5]


> какие еще идеи есть?


если файл небольшой по размеру, грузить его в стринг-лист, в цикле от последней строки до первой искать непустую строку и взять из нее ожидаемые символы


FANAT   (2005-05-31 09:01:00) [6]

блин.... слава всевышнему...
оказывается это сложно.... а то я уж подумал что я вообще ни чего не могу...
так какие еще идеи есть?


Alx2   (2005-05-31 08:47:00) [7]

Сорри. Пост [1] с глюками :)


Alx2   (2005-05-31 08:38:00) [8]

к посту [1]
Надо бы для "If Size > 5 Then" добавить обработку в "else"


Antonn   (2005-05-31 08:35:00) [9]

FANAT ©   (31.05.05 7:34)
может TIniFile попробывать:)


Alx2   (2005-05-31 08:34:00) [10]

Четыре символа - они обязательно из множества ['0'..'9']? Или хранятся в бинарном виде?

Если для случая ['0'..'9'], то примерно так:


 Function ReadLast4DigitsFiltered(Const FileName: String): Integer;
 Var
   Buf: Array[1..7] Of char;
   k: Integer;
 Begin
   With TFileStream.Create(FileName, fmOpenRead) Do
     Try
       If Size > 5 Then
         Begin
           Seek(Size - 6, soFromBeginning);
           If Read(Buf, 6) <> 6 Then
             Raise Exception.Create('Read error');
           For k := 1 To 6 Do
             If Not (Buf[k] In ['0'..'9'])
               Then
               Buf[k] := ' ';
           Buf[7] := #0;
           Result := StrToInt(Buf)
         End;
     Finally
       Free;
     End;
 End;


Наверх

Титульная страница Поиск, карта сайта Написать письмо