Страница 2 из 3
Re: Чтение и запись длинного текста
Добавлено: 24 янв 2007, 12:25
Хыиуду
Вообще для таких записей существуют ini-файлы. Во-первых, структурированы четко, во-вторых, прога может сама найти значение такого-то ключа. См. в модуле inifiles процедуры readstring и readinteger
Кстати, и записывать там можно точно так же просто, writestring, writeinteger.
Re: Чтение и запись длинного текста
Добавлено: 24 янв 2007, 12:57
somewhere
" писал(а):а как создать строку, содержащюю всё до speed
Функция Copy - в Helpe есть.
" писал(а):если максимальный размер строки - 128 символов
Интересно, откуда такие сведения - всегда думал, что 255 :-)
" писал(а):Как создать новый файл, содержащий в своём имени более 1-й точки? (например "myinfo.129.001.txt"). При попытке создать такого типа файл возникает ошибка
В эмуляции ДОС, в которой работает ТР - обломишься, в имени файла ДОС только одна точка. В дельфе наверняка проканает.
" писал(а): Как искать позиции в тексте?
Функция Pos - в Helpe есть.
Через ТР работать с текстовыми файлами, в которых строки длиннее 255 работать тяжело. Предлагаю открыть его как File of byte. Если все делать в одном файле, то два пути:
1. Если файл < хотябы 200-300К можно все после параметра загнать в память, а потом после изменения дописать.
2. Если больше, то тут делаем "move на месте". Смысл каков, сдвинуть данные "после" на то кол-во байт, которое измениться после редактирования параметра.
Вообще если файл меньше 64К то можно делать это все прямо в памяти.
Так какой размер файла?
Re: Чтение и запись длинного текста
Добавлено: 24 янв 2007, 16:36
Колядин Максим
Cообщение от somewhere
Интересно, откуда такие сведения - всегда думал, что 255 :-)
Зря ты так думаешь... Потому что ты должен не думать, а знать! Чётко знать что максимальная длинна строки 255! Ты ж уже умный, весь язык вызубрил!!!!
Шутка! :-)
___________
Cообщение от somewhere
Так какой размер файла?
Размер файла - 7,83 КБ (8*023 байт).
Cообщение от somewhere
В эмуляции ДОС, в которой работает ТР - обломишься, в имени файла ДОС только одна точка. В дельфе наверняка проканает.
А ты не знаешь, нет каких-либо модулей для исправления этой ошибки? Или может можно в TP for Windows, если знаешь как через него, то напиши, пожалуйста как. Ато я в этом языке (TPFW) совсем ничего не понимаю... Спасибо.
Re: Чтение и запись длинного текста
Добавлено: 24 янв 2007, 17:31
Хыиуду
Если размер файла такой маленький, ничего страшного не случится, если его по частям в память запихать, даже в Паскале. А если делать в Дельфи - никто лишних восемь угрызенных килобайт памяти не заметит
Re: Чтение и запись длинного текста
Добавлено: 25 янв 2007, 01:15
Колядин Максим
Сообщение от Хыиуду
Если размер файла такой маленький, ничего страшного не случится, если его по частям в память запихать, даже в Паскале. А если делать в Дельфи - никто лишних восемь угрызенных килобайт памяти не заметит
А как это сделать? Расскажи. А ты не знаешь ничего про "многоточие" в имени файла
(cм. выше)? Как создать такой файл?
Re: Чтение и запись длинного текста
Добавлено: 25 янв 2007, 09:59
Хыиуду
Как это сделать - somewhere писал уже. Про многоточие - в Дельфи это делается элементарно. Например, так:
var f:textfile;
begin
assignfile(f,'C:\123.pas.bat.exe.txt');
rewrite(f);
closefile(f);
end;
В Паскале это не сделается, думаю, потому что Паскаль поддерживает только ДОСовские имена (имя файла<=8 знаков, точка, расширение<=3 знаков - система "8.3"
А по первому вопросу - если в твоей власти изменить протокол файла, бросай этот вариант и переходи на ini-файлы, мой тебе совет. Тогда всю работу за тебя выполнит готовый модуль
Re: Чтение и запись длинного текста
Добавлено: 25 янв 2007, 15:07
Колядин Максим
Жаль что с многоточием так....... А ты не можешь на Turbo Pascal For Windows программировать. Там наверняка тоже можно файлы с несколькими точками создавать.
Re: Чтение и запись длинного текста
Добавлено: 25 янв 2007, 16:29
Хыиуду
Вот уж чего не знаю, того не знаю. Мне так кажется, что Tpw - это просто оболочка под Винду, компилятор-то там стоит обычный Tpшный, Досовский. Впрочем, утверждать не буду, а проверять не хочется, ибо ВинПаскаля под рукой нет и не было в жизни.
Re: Чтение и запись длинного текста
Добавлено: 25 янв 2007, 21:47
Колядин Максим
BPW.exe - в папке BIN турбо-паскаля 7.0 Full. Это и есть TPW. Но там совершенно всё другое... Ну ладно, спасибо всем, кто помогал!
Re: Чтение и запись длинного текста
Добавлено: 26 янв 2007, 09:23
somewhere
Код: Выделить всё
Uses Crt;
var
a : Array[0..10240] of char;
f : File;
Size : Integer;
ParPos : Integer;
ValPos : Integer;
Value : String;
NewValue: String;
Speed : Integer;
ParName : String;
function GetStringPosition(Str:String;StartPos, EndPos:Integer):Integer;
var
tmpstr:String;
lng :Byte;
curpos:Integer;
begin
tmpstr := Str;
lng := Length(Str);
CurPos := StartPos;
repeat
move(a[CurPos], tmpstr[1], lng);
inc(CurPos);
until (tmpstr=Str) or (CurPos=EndPos-Lng);
If tmpstr=Str then GetStringPosition := CurPos-1
else GetStringPosition := -1;
end;
begin
Speed := 10000;
ParName := 'speed=';
Assign(F,'fff.txt');
Reset(F, 1);
ClrScr;
BlockRead(F, a[0], 10240, Size);
ParPos := GetStringPosition(ParName,0, Size);
If ParPos > -1 then
begin
ValPos := GetStringPosition(';',ParPos, Size);
Value[0] := chr(ValPos-ParPos-Length(ParName));
Move(a[ParPos+Length(ParName)], Value[1], length(Value));
Str(Speed, NewValue);
Move(a[ValPos], a[ParPos+Length(ParName)+Length(NewValue)], Size-ValPos);
Move(NewValue[1], A[ParPos+Length(ParName)], Length(NewValue));
Size := Size - Length(Value) + Length(NewValue);
Rewrite(F, 1);
BlockWrite(F, a[0], Size);
Writeln('Parameter found at position ', ParPos);
Writeln('Value = ', Value);
Writeln('New value = ', NewValue);
end else Writeln('Parameter not found');
end.