4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
1

Как проверить, существует ли файл и загрузить его в memo?

27.04.2012, 20:29. Показов 5065. Ответов 45
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как проверить, существует ли файл, и если да, то нужно загрузить его в мемо
Делал так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
b := tstringlist.Create;
  a := tstringlist.Create;
  if fileexists ('a.txt') then
  begin
  pass.loadfromfile('a.txt');
  end
  else
  MessageDlg('Не удалось найти файл a.txt',mtError, [mbOK], 0);
  end;
  if fileexists ('b.txt') then
  begin
  uin.loadfromfile('b.txt');
  end
  else
  MessageDlg('Не удалось найти файл b.txt',mtError, [mbOK], 0);
  end;
...
Memo3.Lines.Add(a.Strings[i] + Edit3.Text + b.Strings[p]);
но по на вылезало куча ошибок
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2012, 20:29
Ответы с готовыми решениями:

Как проверить, существует ли файл в указанной дериктории?
Добрый день! Открываю файл следующим образом, чтобы вывести в Image1: ...

Загрузить файл в memo
имеются 3 html файла(или текстовых) в одной папке, необходимо загрузить текст файла в TMemo или...

Загрузить текстовый файл в Memo
Задача состоит в том чтобы открыть текстовый файл в memo1. Но проблема в том, что имя текстового...

Как открыть файл на чтение и запись, создав его, если его не существует, и перезаписать, если он существует?
Как открыть файл на чтение и запись, создав его, если его не существует, и перезаписать, если он...

45
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 20:40 2
Если не разбираться подробнее, то строки 9 и 16 лишние - убрать.
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 20:48  [ТС] 3
Цитата Сообщение от Одиночка Посмотреть сообщение
Если не разбираться подробнее, то строки 9 и 16 лишние - убрать.
Результат - выводит диалог, который должен выводиться после того, как выполниться код и файл запишется
Вот целый код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var
  i, p: integer;
  pass, uin: tstringlist;
begin
  pass := tstringlist.Create;
  uin := tstringlist.Create;
  if fileexists ('pass.txt') then
  begin
  pass.loadfromfile('pass.txt');
  end
  else
  MessageDlg('Íå óäàëîñü íàéòè ôàéë pass.txt',mtError, [mbOK], 0);
  if fileexists ('pass.txt') then
  begin
  uin.loadfromfile('UIN.txt');
  end
  else
  MessageDlg('Íå óäàëîñü íàéòè ôàéë UIN.txt',mtError, [mbOK], 0);
  for i := 0 to uin.Count - 1 do
  begin
    application.ProcessMessages;
    for p := 0 to pass.Count - 1 do
    begin
      Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[p]);
    end;
  end;
  if CheckBox1.Checked then
  begin
    Memo3.Visible := true;
  end;
  Memo3.Lines.SaveToFile('gen_uin_pass.txt');
  MessageDlg('Save to gen_uin_pass.txt',mtInformation, [mbOK], 0); //если убирать 9 и 16 строки, то выводиться вот это
  pass.Free;
  uin.Free;
  end;
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 21:10 4
Строка 13: наверное должно быть:
Delphi
1
if fileexists ('uin.txt') then
Потом, у тебя после сообщения: 'Не удалось найти файл UIN.txt' всё равно продолжает объединять файлы. Стоит наверное сделать так:
Delphi
1
2
3
4
begin
  MessageDlg('Не удалось найти файл UIN.txt',mtError, [mbOK], 0);
  exit;
end;
И, как я понимаю, тебе нужно объединить эти 2 файла в Memo. Тогда нужно делать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
p:=pass.Count;
k:=uin.Count;
i:=p;
if p<k then i:=k;
 
for i := 0 to i - 1 do
begin
  application.ProcessMessages;
  if ((i<k) and (i<p)) then
  Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i]) else
  if i<k then
  Memo3.Lines.Add(pass.Strings[i]) else
  Memo3.Lines.Add(uin.Strings[i]);
end;
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 21:35  [ТС] 5
Объединяется вроде бы нормально
Я хочу сделать следующее:
Пользователь наживает кнопку, программа проверяет, существует ли файл, если да, то проверяет, существует ли другой файл и если всё хорошо - выполняет код дальше, а если на одном из этапов проверки файл не нашёлся - выдать соответствующую ошибку. Потом, если пользователь ещё раз нажмёт кнопку - начать всё с начала
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 21:41 6
Значит, правильно:
Delphi
1
2
3
4
begin
  MessageDlg('Не удалось найти файл UIN.txt',mtError, [mbOK], 0);
  exit;
end;
И по второму файлу тоже.
Ну и перед циклом объединения, наверное, нужно вставить:
Delphi
1
Memo3.Lines.Clear;
1
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 21:43  [ТС] 7
Так exit; - это ж вроде бы выходи из программы, не?
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 21:45 8
И выход из процедуры/функции тоже. Если находишься в процедуре или функции.
А из программы, вообще-то, выход - close, halt.
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 21:47  [ТС] 9
Теперь, кстати, вообще ничего не происходит Ни окон диалоговых, ни соединения файла - вообще ничего

Добавлено через 1 минуту
А нет, происходит - вылазит системная ошибка, а мне хотелось бы, что бы моя вылазила
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 21:48 10
Выложи код - где-то опять ошибку сделал.
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 21:49  [ТС] 11
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if fileexists ('pass.txt') then
  begin
  pass.loadfromfile('pass.txt');
  end
  else
  begin
  MessageDlg('Íå óäàëîñü íàéòè ôàéë pass.txt',mtError, [mbOK], 0);
  exit;
  end;
  if fileexists ('pass.txt') then
  begin
  uin.loadfromfile('UIN.txt');
  end
  else
  begin
  MessageDlg('Íå óäàëîñü íàéòè ôàéë UIN.txt',mtError, [mbOK], 0);
  exit;
  end;
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 21:52 12
Опять строка 10. Проверяешь один файл, читаешь другой.
1
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 22:17  [ТС] 13
А, точно! Спасибо!

Добавлено через 7 минут
Я только вот тут не много не понял, что тут вообще ?
Цитата Сообщение от Одиночка Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
p:=pass.Count;
 k:=uin.Count;
 i:=p; 
if p<k then i:=k;
 for i := 0 to i - 1 do
 begin 
application.ProcessMessages;
 if ((i<k) and (i<p)) then 
Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i]) 
else 
if i<k then 
Memo3.Lines.Add(pass.Strings[i]) 
else 
Memo3.Lines.Add(uin.Strings[i]); 
end;
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 22:19 14
Если файлы разной длины, то остаток большего файла переносится сам - без соединения со строками другого файла.
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
27.04.2012, 22:28  [ТС] 15
Цитата Сообщение от Одиночка Посмотреть сообщение
Если файлы разной длины, то остаток большего файла переносится сам - без соединения со строками другого файла.
А можно как ни будь сделать так, что если файлы разной длины, то остаток большего файла соединялся с началом меньшего:
Код
asd;123
wrt;734
aht;401
oqp;514 //тут файл с буквами закончился
asd;968
wrt;028
aht;701
и т.д.
Думаю, смысл понятен
И вот ещё вопрос - видел программы, которые разбивают большой файл на два не больших. Собственно, можно эти строчки кода посмотреть?
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.04.2012, 22:54 16

Не по теме:

В течение 30 минут.



Добавлено через 21 минуту
Тогда нужно сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
p:=pass.Count;
k:=uin.Count;
i:=p;
if p<k then i:=k;
 
for i := 0 to i - 1 do
begin
  application.ProcessMessages;
  if ((i<k) and (i<p)) then
  Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i]) else
  if i<k then
  Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i-p]) else
  Memo3.Lines.Add(uin.Strings[i-k] + Edit3.Text + pass.Strings[i]);
end;
А насчёт второго вопроса с налёта не отвечу. Подумаю и пропишу завтра. Ты только напиши: разбивать нужно без учёта строк, или с учётом? Можно разбить просто посреди строки?
1
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
28.04.2012, 12:33  [ТС] 17
Цитата Сообщение от Одиночка Посмотреть сообщение

Не по теме:

В течение 30 минут.



Добавлено через 21 минуту
Тогда нужно сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
p:=pass.Count;
k:=uin.Count;
i:=p;
if p<k then i:=k;
 
for i := 0 to i - 1 do
begin
  application.ProcessMessages;
  if ((i<k) and (i<p)) then
  Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i]) else
  if i<k then
  Memo3.Lines.Add(uin.Strings[i] + Edit3.Text + pass.Strings[i-p]) else
  Memo3.Lines.Add(uin.Strings[i-k] + Edit3.Text + pass.Strings[i]);
end;
А насчёт второго вопроса с налёта не отвечу. Подумаю и пропишу завтра. Ты только напиши: разбивать нужно без учёта строк, или с учётом? Можно разбить просто посреди строки?
Не, мне пока что код целый не нужен, я хочу сам посидеть, по думать
Мне именно нужен код, который выполняет это действие, как sl.Duplicates:=dupignore, на пример
А разбивать, пока что, по размеру или на кол-во файлов. Допустим, есть файл в 10 мб, и его нужно разбить на 4 файла или на файлы, размер которых будет 1000кб (один из двух вариантов)

Добавлено через 13 часов 17 минут
Так что там?
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
28.04.2012, 12:38 18
Насчёт разбивки файлов. Я понял, что тебе нужно, но с такими возможностями пока не сталкивался. Нужно искать. Сейчас закончу одну работу, - обещал, и покопаюсь. Тебе ведь это не срочно?
0
4 / 4 / 0
Регистрация: 07.01.2012
Сообщений: 247
28.04.2012, 12:53  [ТС] 19
Ну, в принципе, не срочно, но хотелось бы по быстрее

Добавлено через 7 минут
А вот это не оно будет? Тут, вроде, файл про размеру(в 1024б) разбивается, не?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const maxsize = 1024;
var F,W: TextFile; b,n: longint; c: char;
begin
  AssignFile(paramstr(1))
  Reset(F);
  n:=1; //first part has id "1"
  repeat
    i:=1;
    AssignFile(W,'new'+inttostr(i)+'.rar'); //creating new part
    ReWrite(W);
    while (i<=maxsize) and not(eof(F)) do
      begin
        read(F,c);
        inc(i);
        write(W,c);
      end;
    CloseFile(W);
    inc(n);
  until eof(F);
  CloseFile(F);
end.
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
28.04.2012, 14:32 20
Это разбивка файла по-живому на части по 1024 байта. Побайтный перенос - очень не рационально. И грубо. Поищу лучшие варианты.

Добавлено через 1 час 17 минут
Это тоже разбивка по-живому, но более эффективная.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
var
  Form1: TForm1;
 
  O,N : File; //Нетипизированные файлы
 
Const
  //Имя исходного файла (можно ввести/задать)
  NameOldFile : String = 'Old.rar';
  //Имена новых файлов (можно ввести/задать)
  PrefixNewFile : String = 'New';
  //Расширение новых файлов (можно ввести/задать)
  ExtNewFile : String = 'rar';
  //Размер новых файлов (можно ввести/задать)
  maxsize = 1024; //Здесь не более 65536 байт
 
implementation
 
{$R *.DFM}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  //Буфер для чтения
  Buff : Array[0..65535] of Byte;
  II,i : Integer;
  SizeNewFile : Longint;
Begin
  AssignFile(O,NameOldFile);
  Reset(O,1);
  i:=0; //Для нумерации выходных файлов
  Repeat
    SizeNewFile:=0; //Текущая длина файла-приёмника
    AssignFile(N,NameOldFile+inttostr(i)+'.'+ExtNewFile);
    ReWrite(N,1);
    While ((SizeNewFile<maxsize) And (Not (Eof(O)))) Do
    Begin
      II:=65536;
      If II>(maxsize-SizeNewFile) Then
      //Если остаток до нужной длины меньше длины буфера
      //будем читать сколько нужно
      II:=(maxsize-SizeNewFile);
      BlockRead(O,Buff,II,II);
      Inc(SizeNewFile,II);
      BlockWrite(N,Buff,II,II);
    End;
    CloseFile(N);
    Inc(i);
  Until Eof(O);
  CloseFile(O);
end;
1
28.04.2012, 14:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2012, 14:32
Помогаю со студенческими работами здесь

Как загрузить текстовый файл с сервера в TStringList или Memo?
Привет друзья. :) Вопрос у меня такой, как осуществить загрузку текстового файла с сервера...

Как проверить существует ли файл в директории
Как проверить существует ли файл в указанной директории. Если да: Выдать сообщение что...

Как на SSI проверить существует ли файл?
Проблема такая: надо на SSI проверить существует ли файл(если да то его надо включить), и если нет,...

Как проверить существует ли файл // папка
Как проверить существует ли файл // папка Раньше я использовал библиотеку Scripting и классы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru