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

Вниз

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)
> функцией Pos


function 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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.011 c
15-1197796608
VasiliyE
2007-12-16 12:16
2008.01.27
Книга: delphi + ооп


3-1190274164
thely
2007-09-20 11:42
2008.01.27
Бесплатные утилиты для ремонта GDB?


2-1198820783
d@nger
2007-12-28 08:46
2008.01.27
Как программно засунуть в свой exe файл другой файл?


1-1193222862
Eisdolch
2007-10-24 14:47
2008.01.27
Мерцание при перерисовке


15-1198078227
Свой
2007-12-19 18:30
2008.01.27
Помогите с настройками delphi 2005 и IIS и asp.net