Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Внизtxt Найти похожие ветки
← →
mr1Andersen (2007-12-29 00:33) [0]Так как это конференция начинающим подскажите пожалуйста:
1) Как сделать так, чтобы при каждом нажатии на кнопку, - осуществлялся переход на новую строчку в текстовом документе?
2) Как сделать так, чтобы при нажатии на кнопку, - осуществлялся переход курсора в конкретную позицию в текстовом документе, к примеру (на 12 строчку 96 символ) ?
← →
Германн © (2007-12-29 00:43) [1]
> mr1Andersen (29.12.07 00:33)
Что понимается под "текстовым документом"?
← →
mr1Andersen (2007-12-29 00:46) [2]1.txt
← →
mr1Andersen (2007-12-29 00:47) [3]в котором есть текст
← →
Германн © (2007-12-29 00:50) [4]
> mr1Andersen (29.12.07 00:46) [2]
>
> 1.txt
Если имеется сам файл, то в нем конечно можно перемещаться по строкам и по символам в строке, но не так просто.
А зачем это нужно? Может есть другое решение.
← →
mr1Andersen (2007-12-29 00:55) [5]Пока я хотел бы решить эти 2-ве проблемы
← →
Германн © (2007-12-29 01:01) [6]
> mr1Andersen (29.12.07 00:55) [5]
>
> Пока я хотел бы решить эти 2-ве проблемы
>
Ладно, пусть так. Тогда объясни что тв понимаешь под
> переход курсора в конкретную позицию в текстовом документе
?
В файле
> 1.txt
нет никаких курсоров.
← →
mr1Andersen (2007-12-29 01:15) [7]
> Ладно, пусть так. Тогда объясни что тв понимаешь под > переход
> курсора в конкретную позицию в текстовом документе
Имеется ввиду то положение, которое проверяется функцией Pos
← →
Германн © (2007-12-29 01:19) [8]
> Имеется ввиду то положение, которое проверяется функцией
> Pos
>
Функция Pos работает для переменной типа строка в программе. Причем тут позиция в файле? Этот файл у тебя уже загружен в программу или нет?
← →
homm © (2007-12-29 01:20) [9]> [7] mr1Andersen (29.12.07 01:15)
> функцией Posfunction Pos(Substr: string; S: string): Integer;
А при чем тут файлы? А при чем тут строки? А при чем тут курсоры?
← →
mr1Andersen (2007-12-29 01:42) [10]Может я ни корректно выразился, тогда извините.
Есть «1.txt» в который записан текст.
procedure TForm1.Button1Click(Sender: TObject);
Var
f : TextFile;
a : String;
k:Integer;
begin
AssignFile(f,"1.txt");
Reset(f);
begin
Read(f,a);
Edit1.Text:= copy(a,1,5);
End;
end;
end.
2) Как сделать так, чтобы при нажатии на кнопку 2 я смог прочитать ни первую строчку, а к примеру (перейти на 12 строчку и прочитать 5 символов начиная с 96-го символа)?
← →
{RASkov} © (2007-12-29 01:57) [11]> [10] mr1Andersen (29.12.07 01:42)
> Read(f,a);
Read - точно читает не строчку....
2) Например так:
procedure TForm1.Button1Click(Sender: TObject);
Var
S : String;
Lst: TStrings;
begin
Lst:=TStringList.Create;
Lst.LoadFromFile("1.txt");
S:=Copy(Lst[11], 96, 5);
ShowMessage(S);
Lst.Free;
end;
:) Это НЕ оптимальный вариант, но как пример пойдет)
← →
Германн © (2007-12-29 02:02) [12]
> mr1Andersen (29.12.07 01:42) [10]
>
> Может я ни корректно выразился, тогда извините.
>
Ну очень некорректно. Документ - это сложное понятие внедрямое в мозги пользователей МелкоМягкими во главе с БГ :)
По сути. Текстовый файл - есть файл с т.н. последовательным доступом. Т.е. перемещаться в нем можно лишь в одном направлении (от начала к концу) и понимает он только строки (причем целиком, доступ к отдельным символам в нем не предусмотрен).
Но можно, в принципе, (если абстрагироваться от трудностей практической реализации) достичь желаемого открыв сей файл не как текстовый
> Var
> f : TextFile;
>
а как просто File.Var
f : File;
Первая строка в нем начинается с первого символа (байта). Строки заканчиваются последовательностью символов #13#10.
Перебирай (т.е. читай) символы в файле пока не найдешь n-ную строку и k-тый символ в ней.
P.S. А может всё же озвучишь задачу?
← →
mr1Andersen (2007-12-29 02:10) [13]
> Первая строка в нем начинается с первого символа (байта).
> Строки заканчиваются последовательностью символов #13#10.
> Перебирай (т.е. читай) символы в файле пока не найдешь n-
> ную строку и k-тый символ в ней.
Пожалуйста, приведи маленький пример этого
← →
mr1Andersen (2007-12-29 02:11) [14]{RASkov} Большое спасибо за пример.
← →
Германн © (2007-12-29 02:16) [15]
> mr1Andersen (29.12.07 02:10) [13]
>
>
> > Первая строка в нем начинается с первого символа (байта).
>
> > Строки заканчиваются последовательностью символов #13#10.
>
> > Перебирай (т.е. читай) символы в файле пока не найдешь
> n-
> > ную строку и k-тый символ в ней.
>
>
> Пожалуйста, приведи маленький пример этого
>
Не думаю, что это тебе нужно. А мне лень нажимать клавиши в пустую.
← →
mr1Andersen (2007-12-29 02:25) [16]Извини, просто я ни работал с f : File; и визуально ни имею представления вообще что с такими файлами делать, и что кроме байтов, на сколько я понимаю, туда ни в пишешь.
← →
Германн © (2007-12-29 02:35) [17]
> mr1Andersen (29.12.07 02:25) [16]
>
> Извини, просто я ни работал с f : File; и визуально ни имею
> представления вообще что с такими файлами делать, и что
> кроме байтов, на сколько я понимаю, туда ни в пишешь.
>
Эти файлы не предназначены для визуального представления. А вписать в них можно что угодно.
P.S. Кстати. Кроме байтов в файлах вообще ничего нет и быть не может! Прими это к сведению.
:)
← →
{RASkov} © (2007-12-29 02:40) [18]> [16] mr1Andersen (29.12.07 02:25)
> и что кроме байтов, на сколько я понимаю, туда ни в пишешь
Дык в текстовом файле один фик байты "лежат".... или тебе кажется что все по другому?
Конечно Германн предложил "тяжелый" вариант решения твоей задачи, но зато многому бы научился, если бы разобрался бы :)
Вот практически тот же вариант, но СИЛЬНО упрощен, и не мной, а борландом...var FTxt: TextFile; S: String; I: Integer;
begin
AssignFile(FTxt, "1.rtf");
Reset(FTxt);
I:=0;
while not (EOF(FTxt)) and (I<12) do begin
ReadLn(FTxt, S);
INC(I);
end;
S:=Copy(S, 96,5);
ShowMessage(S);
CloseFile(FTxt);
end;
Опять же - это пример для разнообразия, но и он возможно не оптимальный для конкретного решения....
ЗЫ Примеры мои не без граблей)
← →
mr1Andersen (2007-12-29 02:59) [19]Спасибо за пример. Я ни знаю преимуществ (*.rtf), мне роднее работать с (*.txt),
← →
{RASkov} © (2007-12-29 03:09) [20]> [19] mr1Andersen (29.12.07 02:59)
> Я ни знаю преимуществ (*.rtf), мне роднее работать с (*.txt)
:)
Это мой "недогляд") Конечно же там должно быть 1.txt ) Главное помни, что расширение - это ни о чем) Главное формат файла. А формат файла задается структурой файла и не в коей мере не зависит от расширения.... Текстовые(*.txt, но не *.doc или *.rtf) еще отличаются от остальных, тем что в них присутствуют так называемые - строки. Строка - это или от начала файла или от очередного сочетания пары байт со значениями 13 и 10 до, опять же, либо конца файла либо очередных пары байт 13 и 10, в виндоусе.
← →
homm © (2007-12-29 07:43) [21]> [16] mr1Andersen (29.12.07 02:25)
> Извини, просто я ни работал с f : File; и визуально ни имею
> представления вообще что с такими файлами делать, и что
> кроме байтов, на сколько я понимаю, туда ни в пишешь.
Мегалол.
← →
Looser (2007-12-29 08:52) [22]Мастера,
А для больших файлов вместо "TStringList" какой можно испольовать тип ?
← →
Palladin © (2007-12-29 10:42) [23]f:Text/TextFile;
s:String;
← →
palva © (2007-12-29 10:50) [24]Я наконец-то понял ваш вопрос. Вам просто надо прочитать хелп по паскалевским функциям работы с файлами. Или найдите какой нибудь элементарный учебник не для батонокидателей. Текстовые файлы можно читать не только строками, но и отдельные символами. Разберите следующий пример.
{$APPTYPE CONSOLE}
var
fi: TextFile;
s: String;
c1, c2, c3: Char;
begin
Assign(fi, "1.txt");
{ Файл 1.txt ----------------
111
abracadabra
abcd
xyz
f
--------------------------- }
Reset(fi);
Read(fi, s); // Прочитали первую строку
WriteLn(s); // 111
Read(fi, s); // Прочитали остаток первой строки
WriteLn(s); // Пустая строка, поскольку находились в конце строки
WriteLn(EOLn(fi)); // TRUE - и в самом деле в конце строки
ReadLn(fi); // Перешли на следующую строку
Read(fi, c1); // Прочитали первый символ второй строки
WriteLn(c1); // a
WriteLn(EOLn(fi)); // FALSE - в конце строки не находимся
ReadLn(fi, s); // Прочитали остаток второй строки и перешли на следующую строку
WriteLn(s); // bracadabra
WriteLn(EOLn(fi)); // FALSE - в начале следующей это же не в конце строки?
Read(fi, c1); // Прочитали первый символ строки
ReadLn(fi, c2); // Прочитали второй символ и перешли на следующую строку
Read(fi, c3); // Прочитали первый символ следующей строки
WriteLn(c1, c2, c3); // abx
Read(fi, s); // Дочитали остаток строки и оказались в конце строки
Read(fi, c1, c2, c3); // Читаем символы конца строки и первый символ следующей строки
WriteLn(Ord(c1):4, Ord(c2):4, c3:4); // 13 10 f
Read(fi, c1, c2, c3); // Читаем символы конца строки и символ конца файла (в файле отсутствует)
WriteLn(Ord(c1):4, Ord(c2):4, Ord(c3):4); // 13 10 26
Read(fi, c1); // Пытаемся читать за концом файла получаем символ конца файла
WriteLn(Ord(c1):4); // 26
WriteLn(EoF(fi)); // TRUE - и в самом деле в конце файла
Close(fi);
end.
← →
Msguns © (2007-12-29 21:01) [25]TMemo ?
← →
Amoeba © (2007-12-30 00:38) [26]Автору вопроса настоятельно рекомендую наведаться сюда:
http://www.delphikingdom.com/lyceum/
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.006 c