Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Как удалить из txt пустую строку? Ъ   Найти похожие ветки 

 
FANAT ©   (2005-05-31 07:34) [0]

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


 
Alx2 ©   (2005-05-31 08:34) [1]

Четыре символа - они обязательно из множества ["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;


 
Antonn ©   (2005-05-31 08:35) [2]

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


 
Alx2 ©   (2005-05-31 08:38) [3]

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


 
Alx2 ©   (2005-05-31 08:47) [4]

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


 
FANAT ©   (2005-05-31 09:01) [5]

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


 
Digitman ©   (2005-05-31 09:07) [6]


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


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


 
Anatoly Podgoretsky ©   (2005-05-31 09:13) [7]

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


 
Alx2 ©   (2005-05-31 09:21) [8]

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:36) [9]

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


 
Alx2 ©   (2005-05-31 09:46) [10]

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
1-1117280052
LubaAL
2005-05-28 15:34
2005.06.14
Фон формы


9-1110741932
parovoZZ
2005-03-13 22:25
2005.06.14
JEDI SDL - SDLSpriteEngine


14-1116872401
gn
2005-05-23 22:20
2005.06.14
фото альбом


1-1117192435
Jupiter
2005-05-27 15:13
2005.06.14
Копирование по маске


3-1115277422
Dels
2005-05-05 11:17
2005.06.14
Компонент DBMemo в Windows XP