Чтение и запись длинного текста
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Вообще для таких записей существуют ini-файлы. Во-первых, структурированы четко, во-вторых, прога может сама найти значение такого-то ключа. См. в модуле inifiles процедуры readstring и readinteger
Кстати, и записывать там можно точно так же просто, writestring, writeinteger.
Кстати, и записывать там можно точно так же просто, writestring, writeinteger.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Функция Copy - в Helpe есть." писал(а):а как создать строку, содержащюю всё до speed
Интересно, откуда такие сведения - всегда думал, что 255 :-)" писал(а):если максимальный размер строки - 128 символов
В эмуляции ДОС, в которой работает ТР - обломишься, в имени файла ДОС только одна точка. В дельфе наверняка проканает." писал(а):Как создать новый файл, содержащий в своём имени более 1-й точки? (например "myinfo.129.001.txt"). При попытке создать такого типа файл возникает ошибка
Функция Pos - в Helpe есть." писал(а): Как искать позиции в тексте?
Через ТР работать с текстовыми файлами, в которых строки длиннее 255 работать тяжело. Предлагаю открыть его как File of byte. Если все делать в одном файле, то два пути:
1. Если файл < хотябы 200-300К можно все после параметра загнать в память, а потом после изменения дописать.
2. Если больше, то тут делаем "move на месте". Смысл каков, сдвинуть данные "после" на то кол-во байт, которое измениться после редактирования параметра.
Вообще если файл меньше 64К то можно делать это все прямо в памяти.
Так какой размер файла?
It's a long way to the top if you wanna rock'n'roll
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
Зря ты так думаешь... Потому что ты должен не думать, а знать! Чётко знать что максимальная длинна строки 255! Ты ж уже умный, весь язык вызубрил!!!! Шутка! :-)Cообщение от somewhere
Интересно, откуда такие сведения - всегда думал, что 255 :-)
___________
Размер файла - 7,83 КБ (8*023 байт).Cообщение от somewhere
Так какой размер файла?
А ты не знаешь, нет каких-либо модулей для исправления этой ошибки? Или может можно в TP for Windows, если знаешь как через него, то напиши, пожалуйста как. Ато я в этом языке (TPFW) совсем ничего не понимаю... Спасибо.Cообщение от somewhere
В эмуляции ДОС, в которой работает ТР - обломишься, в имени файла ДОС только одна точка. В дельфе наверняка проканает.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Если размер файла такой маленький, ничего страшного не случится, если его по частям в память запихать, даже в Паскале. А если делать в Дельфи - никто лишних восемь угрызенных килобайт памяти не заметит
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
А как это сделать? Расскажи. А ты не знаешь ничего про "многоточие" в имени файла(cм. выше)? Как создать такой файл?Сообщение от Хыиуду
Если размер файла такой маленький, ничего страшного не случится, если его по частям в память запихать, даже в Паскале. А если делать в Дельфи - никто лишних восемь угрызенных килобайт памяти не заметит
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Как это сделать - somewhere писал уже. Про многоточие - в Дельфи это делается элементарно. Например, так:
var f:textfile;
begin
assignfile(f,'C:\123.pas.bat.exe.txt');
rewrite(f);
closefile(f);
end;
В Паскале это не сделается, думаю, потому что Паскаль поддерживает только ДОСовские имена (имя файла<=8 знаков, точка, расширение<=3 знаков - система "8.3"
А по первому вопросу - если в твоей власти изменить протокол файла, бросай этот вариант и переходи на ini-файлы, мой тебе совет. Тогда всю работу за тебя выполнит готовый модуль
var f:textfile;
begin
assignfile(f,'C:\123.pas.bat.exe.txt');
rewrite(f);
closefile(f);
end;
В Паскале это не сделается, думаю, потому что Паскаль поддерживает только ДОСовские имена (имя файла<=8 знаков, точка, расширение<=3 знаков - система "8.3"
А по первому вопросу - если в твоей власти изменить протокол файла, бросай этот вариант и переходи на ini-файлы, мой тебе совет. Тогда всю работу за тебя выполнит готовый модуль
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
Жаль что с многоточием так....... А ты не можешь на Turbo Pascal For Windows программировать. Там наверняка тоже можно файлы с несколькими точками создавать.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Вот уж чего не знаю, того не знаю. Мне так кажется, что Tpw - это просто оболочка под Винду, компилятор-то там стоит обычный Tpшный, Досовский. Впрочем, утверждать не буду, а проверять не хочется, ибо ВинПаскаля под рукой нет и не было в жизни.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
BPW.exe - в папке BIN турбо-паскаля 7.0 Full. Это и есть TPW. Но там совершенно всё другое... Ну ладно, спасибо всем, кто помогал!
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Код: Выделить всё
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.
It's a long way to the top if you wanna rock'n'roll