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

Вниз

Cледующий код дописывает к файлу перевод строки. Как от этого изб   Найти похожие ветки 

 
Алекс А   (2004-06-13 01:11) [0]

авиться ?

 ListBox1.Items.LoadFromFile( "test.txt" );
 ListBox1.Items.SaveToFile( "test.txt" );

Файл test.txt состоит всего из одного символа "a". После выполнения кода его длина увеличивается до 3 символов. Происходит это возможно из-за того, что каждая строка должна заканчиваться переводом строки. Мне же надо, чтобы ничего лишнего не дописывалось. Если в конце последней строки нет перевода, то чтобы также и оставалось бы. Как этого можно добиться ?


 
KilkennyCat ©   (2004-06-13 01:13) [1]

Не пользоваться Lines. Либо удалять ненужное вручную.


 
Anatoly Podgoretsky ©   (2004-06-13 01:25) [2]

Перед загрузкой проверь есть ли в конце символы перевода, после сохранения скорректируй


 
Алекс А   (2004-06-13 03:19) [3]


> Anatoly Podgoretsky ©   (13.06.04 01:25) [2]
> Перед загрузкой проверь есть ли в конце символы перевода,
> после сохранения скорректируй

Какая функция позволяет узнать длину файла диске, не открывая его? Что то в справке нету. Хочу сравнить длину файла на диске с ListBox1.Items.Text , чтобы при сохранении скорректировать.


 
Fay ©   (2004-06-13 04:52) [4]

2Алекс А   (13.06.04 03:19) [3]
FindFirst


 
Алекс А   (2004-06-14 01:20) [5]


> Fay ©   (13.06.04 04:52) [4]
> 2Алекс А   (13.06.04 03:19) [3]
> FindFirst

А как эту длину уменьшить не загружая файла, а лишь указав файловой системе другую его длину ?


 
Palladin ©   (2004-06-14 01:26) [6]

В справке нет? А ты искал? Всего то требовалось перевсти да подумать...
FileSize
FileSizeByName

GetFileSize - WAPI


 
Алекс А   (2004-06-14 01:37) [7]


> Palladin ©   (14.06.04 01:26) [6]
> В справке нет? А ты искал? Всего то требовалось перевсти
> да подумать...
> FileSize
> FileSizeByName
>
> GetFileSize - WAPI

И чего GetFileSize ? Как уменьшить-то размер файла на диске не грузя его ?


 
default ©   (2004-06-14 01:41) [8]

ёлки, а не быстрей-ли добавить "специальный" SaveToFile
написав потомка TMemo, пишущий строки в файл без #13#10 в конце списка?


 
default ©   (2004-06-14 01:42) [9]

вернее к ListBox-у, но это ничего не меняет


 
Алекс А   (2004-06-14 01:54) [10]


> default ©   (14.06.04 01:41) [8]
> ёлки, а не быстрей-ли добавить "специальный" SaveToFile
> написав потомка TMemo, пишущий строки в файл без #13#10
> в конце списка?

Не быстрее. Быстрее изменить одну цифру длины файла.


 
default ©   (2004-06-14 02:04) [11]

судя по времени появления сабжа этого не сказать


 
KilkennyCat ©   (2004-06-14 02:19) [12]

Изменение одной цифры длины записи - работа равносильна и по времени и по смыслу > default ©   (14.06.04 01:41) [8]


 
default ©   (2004-06-14 02:29) [13]

KilkennyCat ©   (14.06.04 02:19) [12]
поточнее можно: что вы хотите за запись менять?
для автора сабжа быстрей бы было [8] тем более в исходниках уже готовый код есть, там только чуть изменить и скопировать...


 
KilkennyCat ©   (2004-06-14 02:49) [14]


> default ©   (14.06.04 02:29) [13]


Это я хотел сказать "изменение длины файла при записи" :)

> для автора сабжа быстрей бы было [8] тем более в исходниках
> уже готовый код есть, там только чуть изменить и скопировать...


Да я вроде так и сказал :)


 
Алекс А   (2004-06-14 04:32) [15]

Так как же всё таки подправить длину файла на диске ?


 
Palladin ©   (2004-06-14 09:49) [16]


> [15] Алекс А   (14.06.04 04:32)

Путем потери данных? Trunc


 
Алекс А   (2004-06-15 02:08) [17]


> Palladin ©   (14.06.04 09:49) [16]
>
> > [15] Алекс А   (14.06.04 04:32)
>
> Путем потери данных? Trunc

Ненужных данных. Ну, так чего, никто не знает ?


 
KilkennyCat ©   (2004-06-15 02:12) [18]

BlockWrite


 
Алекс А   (2004-06-15 03:21) [19]


> KilkennyCat ©   (15.06.04 02:12) [18]
> BlockWrite

Эта функция записывает данные в файл. Нужна же которая уменьшит его длину на диске.


 
KilkennyCat ©   (2004-06-15 03:23) [20]


> Алекс А   (15.06.04 03:21) [19]


эта функция не только записывает данные в файл. Она записывает определенный блок данных. Определите его размер меньше на два байта - и все.


 
Алекс А   (2004-06-15 03:27) [21]


> KilkennyCat ©   (15.06.04 03:23) [20]
>
> > Алекс А   (15.06.04 03:21) [19]
>
> эта функция не только записывает данные в файл. Она записывает
> определенный блок данных. Определите его размер меньше на
> два байта - и все.

Геморойно. Считать блок, определить длину, уменьшить, записать блок. Неужели в Дельфи несуществует готовых функций ?


 
KilkennyCat ©   (2004-06-15 03:34) [22]


> Алекс А   (15.06.04 03:27) [21]


Более того. Все вычисления процессором делаются при помощи нолика и единички.
Что имеется в виду "Готовая функция"? делающая требуемое за пару тактов? с минимумом геморроя? RemBK(filename)? Чушь. Можно тогда требовать готовую функцию для каждой проблемы. Или целиком для программы.


 
Алекс А   (2004-06-15 03:43) [23]


> KilkennyCat ©   (15.06.04 03:34) [22]
>
> > Алекс А   (15.06.04 03:27) [21]
>
>
> Более того. Все вычисления процессором делаются при помощи
> нолика и единички.
> Что имеется в виду "Готовая функция"? делающая требуемое
> за пару тактов? с минимумом геморроя? RemBK(filename)? Чушь.
> Можно тогда требовать готовую функцию для каждой проблемы.


Можно. Ибо файловых функций всего-то десяток от силы. И не иметь стандартной функции для изменения длиный файла - бред.


 
KilkennyCat ©   (2004-06-15 03:52) [24]

ну есть такая, только не для текстовых,
еще
> Palladin ©   (14.06.04 09:49) [16]

указал

Truncate


 
KilkennyCat ©   (2004-06-15 03:52) [25]

и если их всего десяток, то можно было бы и посмотреть....


 
Алекс А   (2004-06-15 04:13) [26]


> KilkennyCat ©   (15.06.04 03:52) [25]
> и если их всего десяток, то можно было бы и посмотреть....


Ну, так и чего ? Стандартной функции несуществует вообще ? Или я не нашёл просто ?


 
Fay ©   (2004-06-15 04:31) [27]

var
 h : DWORD;
begin
 h := CrateFile("c:\бут.ини", GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
 if h = DWORD(-1) then
     RaiseLastOSError;
 else
   begin
     SetFilePointer(
       h,
       NEW_FILESIZE, // Сам задашь
       nil,
       FILE_BEGIN);
     CloseHandle(h);
   end;
end;


 
Mim1 ©   (2004-06-15 10:32) [28]

f:tfilestream;
s:string;
begin
 ListBox1.Items.LoadFromFile( "test.txt" );
 f := tfilestream.create("test.txt" , fmCreate);
 try
    s := ListBox1.Items.text;
    f.write(pointer(s)^,length(s)-2);
 finally
   freeandnil(f);
 end;  
end;


 
Плохиш ©   (2004-06-15 10:48) [29]

>Fay ©   (15.06.04 04:31) [27]
>Mim1 ©   (15.06.04 10:32) [28]

Стандартный способ получения кода в действии :-(

Вопрос - наезд - грубый наезд - "делфи дерьмо" --> готовый код и думалку включать не надо.
Одно радует конкурентов у нас больще не становиться ;-)


 
ПсихЪ   (2004-06-15 10:58) [30]

Чё вы все тупите. Чел-то, понятно, просто стебётся над вами, а вы и поддаётесь сей мерзкой провакации.
С тем же успехом могли бы развести флэйм на предмет "Неужели в Великой Делпхи нет функции для автоматического написания программ волей мысли? ЧТобы запустил прогу, подумал "ХАЧУ ВОРД ХП", и у тебя на форме тут же выскочили все необходимые компоненты".

To Алекс А:
Если ты действительно такой ленивый, что тебе влом предварительно ознакомится с документацией, посмотреть примеры и стетьи в Интернете, и ты вместо этого идёшь и постишь на форуме какую-то глупость, то нафига ты тогда вообще программируешь?
Завтра ты придёшь и спросишь "А как мне поменять цвет текста в TMemo?". Хорошь тупить, читай доки и смотри примеры, прежде чем постить на форуме.
Закрывай тему, к чёртовой матери!


 
Алекс А   (2004-06-18 01:16) [31]


> Fay ©   (15.06.04 04:31) [27]


Функция почему то не действует. Длина файла остаётся неизменной. В чём тут может быть дело ? Вроде всё просто, а не работает.


function CutFileLength(aFileName : PAnsiChar; aNewFileSize : Integer): Boolean;
var
 h : DWORD;
begin
 h := CreateFile(aFileName,  GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
 if h = DWORD(-1) then begin
    Result := False;
    RaiseLastOSError
 end else begin
    SetFilePointer(
      h,
      aNewFileSize, // NEW_FILESIZE, // Сам задашь
      nil,
      FILE_BEGIN);
    CloseHandle(h);
    Result := True;
  end;
end;


 
Алекс А   (2004-06-18 01:19) [32]


> Palladin ©   (14.06.04 01:26) [6]
> FileSizeByName

В каком модуле находится FileSizeByName ? Нашё только FileSize .


 
Andy BitOff ©   (2004-06-18 01:29) [33]

>Алекс А   (13.06.04 01:11) Старт!!!

Прошло ПЯТЬ дней !!!!!!!!!!!!!!!!!!!!!!!

>Алекс А   (18.06.04 01:16) [31]
Функция почему то не действует.


Да за это время можно было свой ListBox написать с нуля.
Точно у парня геморрой.


 
Алекс А   (2004-06-18 02:57) [34]


> Прошло ПЯТЬ дней !!!!!!!!!!!!!!!!!!!!!!!

Глюк редковозникающий, срочности никакой. Но всё надо доводить до конца !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


> Да за это время можно было свой ListBox написать с нуля.

Пиши. Время пошлО.


 
Alx2 ©   (2004-06-18 07:27) [35]

:)
Вот так писать не надо:

procedure TForm1.Button1Click(Sender: TObject);
var
 S: string;
 len: Integer;
 F: System.Text;
begin
 S := ListBox1.Items.Text;
 Len := Length(S);
 while (Len > 0) and (S[Len] in [ #10, #13]) do dec(Len);
 SetLength(S, Len);
 AssignFile(F, FileName);
 Rewrite(F);
 Write(F, S);
 CloseFile(F);
end;


 
Алекс А   (2004-06-21 02:47) [36]

Почему всё таки не работает укарачивание файла ? В чём ошибка ?

function CutFileLength(aFileName : PAnsiChar; aNewFileSize : Integer): Boolean;
var
h : DWORD;
begin
h := CreateFile(aFileName,  GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
if h = DWORD(-1) then begin
   Result := False;
   RaiseLastOSError
end else begin
   SetFilePointer(
     h,
     aNewFileSize, // NEW_FILESIZE, // Сам задашь
     nil,
     FILE_BEGIN);
   CloseHandle(h);
   Result := True;
 end;
end;


 
Fay   (2004-06-21 03:23) [37]

Перед CloseHandle надо SetEndOfFile(h)


 
Алекс А   (2004-06-21 03:44) [38]


> Fay   (21.06.04 03:23) [37]
> Перед CloseHandle надо SetEndOfFile(h)


Заработало ! Причём что любопытно она может не только уменьшать, но и увеличивать длину файла ! ( Правда за счёт всякого мусора. )


 
Fay   (2004-06-21 03:51) [39]


> Причём что любопытно она может не только уменьшать, но и
> увеличивать длину файла ! ( Правда за счёт всякого мусора.
> )

Спасибо, я в курсе 8).
З.Ы.
SetEndOfFile я просто забыл написать 8).



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

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

Наверх




Память: 0.57 MB
Время: 0.046 c
3-1086355421
a123
2004-06-04 17:23
2004.07.04
Фильтрация в IBQuery1


3-1086707841
Юрий
2004-06-08 19:17
2004.07.04
Индексы


11-1076135398
Ajax
2004-02-07 09:29
2004.07.04
Компонент для работы с ZIP архивами


1-1087430308
Артем К.
2004-06-17 03:58
2004.07.04
Рисование без мерцания?


6-1084343292
Term
2004-05-12 10:28
2004.07.04
FTP-клиент