Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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)
> функцией 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.006 c
11-1182595595
Vladimir Kladov
2007-06-23 14:46
2008.01.27
Версия 2.70


2-1198598202
Евгений Р.
2007-12-25 18:56
2008.01.27
MDI приложение


3-1190140314
lz269
2007-09-18 22:31
2008.01.27
IB6-Delphi5, проблемы с полями DATE


2-1198508759
Kvendi
2007-12-24 18:05
2008.01.27
Скриншот некого чужого окна


2-1198598547
Ega23
2007-12-25 19:02
2008.01.27
Определить документ MSOffice





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский