Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизКак удалить из 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c