![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как удалить из 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;