Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 85 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2014, 23:54   #1
tane
Пользователь
 
Регистрация: 14.12.2013
Сообщений: 64
По умолчанию Удалить из файла все отрицательные компоненты(Delphi)

Здравствуйте,господа!
Учу самостоятельно Delphi вторую неделю.Нужно решить задание.
Организовать файл целых чисел из N компонент. Удалить из файла все отрицательные компоненты. Вывести содержимое файла до и после обработки.

Вот запись у файл чисел,но вместо чисел - иероглифы.

Код:
var f: file of integer; i, j, k, m: integer;
begin
 
  assignfile(f,'c:\file.txt');
  rewrite(f);
  for i:=1 to 15 do begin
    k := random(5)-2;
    write(f, k)
  end;
  CloseFile(f);
1.Какой создать файл(txt...) ?
2. Как удалить из файла все отрицательные компоненты?
3.Как и куда вывести содержимое файла до и после обработки?
Помогите сделать.
tane вне форума Ответить с цитированием
Старый 30.01.2014, 00:09   #2
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от tane Посмотреть сообщение
1.Какой создать файл(txt...) ?
В гугле этот ответ ищется за 10 секунд
Цитата:
Сообщение от tane Посмотреть сообщение
2. Как удалить из файла все отрицательные компоненты?
В файле не бывает компонентов.
Цитата:
Сообщение от tane Посмотреть сообщение
3.Как и куда вывести содержимое файла до и после обработки?
Помогите сделать.
Куда выводить, зависит от того, что ты хочешь увидеть. Варианты. ListBox, Memo, RichEdit. Выбирай. Ну а как выводить, зависит от того, куда ты будешь выводить. В основном все контролы для загрузки документов используют функцию LoadFromFile.

По поводу кода не знаю что ты имел в виду под File of Integer, Если цель стояла забить текстовик рандомными числами, то вот исправленный код.
Код:
var f: TextFile;
i, k: integer;
begin
  AssignFile(f,'c:\file.txt');
  Rewrite(f);
  for i:=1 to 15 do begin
    k := Random(5)-2;
    WriteLn(f, IntToStr(k));
  end;
  CloseFile(f);
Вопросы?

Последний раз редактировалось doktor255; 30.01.2014 в 00:24.
doktor255 вне форума Ответить с цитированием
Старый 30.01.2014, 00:45   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,537
По умолчанию

Цитата:
Сообщение от tane Посмотреть сообщение
Вот запись у файл чисел,но вместо чисел - иероглифы..
А как вы увидели эти иероглифы. Наверное, открыли в Блокноте ( слово txt наводит на эту мысль). Тогда все правильно. Блокнот читает побайтно файл, и выводит символы, у которых код равен этому байту.

Вы путаете текстовые и типизированные файлы. Создаете типизированный, и пытаетесь читать как текстовый.

Попробуйте кстати вот так
Код:
for i:=48 to 57 do begin 
    write(f, i)
и посмотреть в блокноте
type_Oleg вне форума Ответить с цитированием
Старый 30.01.2014, 00:49   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Цитата:
Учу самостоятельно Delphi вторую неделю.Нужно решить задание.
Почти поверели) А иероглифы у вас от того, что файл у вас объявлен целого типа, а надо текстового, ну а на крайняк-типизированного, и при добавлении записи преобразовывать число в строку, ну опираясь на вашу идею написал программу, но просмотреть этот файл можно только через эту программу, иначе результат один-иероглифы) Тему в принципе вам разжевали, остальное-за вами) вот ваша программа.

type_Oleg, а разве типизированный файл не есть файл записи одного типа и фиксированной длины, то есть:
Код:
type
zapis=record
stroka:string[15];
price:real;
kolich:word;
end;

var
f:file of zapis;
w:zapis;
Вложения
Тип файла: rar files.rar (174.9 Кб, 12 просмотров)
from dark to light)

Последний раз редактировалось Stilet; 30.01.2014 в 08:58.
Алексей_2012 вне форума Ответить с цитированием
Старый 30.01.2014, 00:59   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,537
По умолчанию

Ну да, и file of integer - тоже типизированный.
type_Oleg вне форума Ответить с цитированием
Старый 30.01.2014, 08:51   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

doktor255, Алексей_2012, я вас очень прошу, не надо давать советы в категорической форме, если не чувствуешь на 100%, что ты владеешь вопросом и являешься в этом Мастером.

например, с чего Вы решили, что автору топика нужен ТЕКСТОВЫЙ файл?!
Оттого, что Вы не знаете/не любите/не умеете работать с типизированным файлом?!

В данной задачи как раз ЯВНО нужно использовать типизированный файл (ибо только в типизированном файл может идти речь о "компонентах"


Цитата:
Сообщение от -tane
Вот запись у файл чисел,но вместо чисел - иероглифы.
как выше правильно сказали, так и должно быть. Этот файл является бинарным (двоичным), он НЕ ТЕКСТОВЫЙ! Его можно читать/писать только программным способом. Т.е. Вы пишете программу, которая создаёт данный файл или изменяет в нём компоненты, или выводит содержимое файла (куда, это уже зависит от программы, как вариант, программа может вывести данные в текстовый файл, можно вывести на экран, если у Вас консольная программа, или в любой визуальный контрол, если у Вас программа с формами.

Цитата:
Сообщение от -tane
1.Какой создать файл(txt...) ?
код, который Вы привели в своём сообщении - это и есть правильное создание данного файла.
Единственно, позволю себе дать Вам небольшой совет: вашей программе абсолютно безразлично имя файла (ну, если оно является допустимым в файловой системе, разумеется), но, чтобы не путать себя, других и программы ОС, лучше давать своему файлу СВОЁ расширение.
примерно так:
Код:
  AssignFile(f,'c:\Myfile.bin');
можно использовать расширение .dat или .int или вообще набор букв (.ddd, например).
Это позволит Вам не открывать данные файл в блокноте и не пугаться содержимому!

Цитата:
Сообщение от -tane
2. Как удалить из файла все отрицательные компоненты?
вот тут всё зависит от алгоритма, который вы выберете.
самый простой и надежный (имхо) - это использовать доп.файл в качестве временного. Тогда можно читать из исходного файла по одной компоненте, положительные писать во временный файл, отрицательные - игнорировать.
После окончания, закрыть оба файла, удалить исходный, переименовать временный в имя, которое было у исходного файла.

вариант 2. Создать в памяти массив, равный размеру файла. Прочитать в него положительные числа (как и в первом случае, отрицательные игнорируем). Перезаписать файл и записать в него полученные положительные числа.

вариант 3. Самый сложные, муторный, НЕ ЭФФЕКТИВНЫЙ и НЕ НАДЁЖНЫЙ!
Алгоритм такой, идём в цикле, читаем из файла по одной компоненте, как только очередная компонента файла оказалась отрицательным числом, то последовательно в цикле сдвигаем все оставшиеся компоненты файла на её место. В данном случае можно использовать тот факт, что типизированный файл является файлом прямого доступа, с помощью процедуры Seek() указатель в файле можно установить на ЛЮБОЙ компонент файла и либо прочитать это компонент, либо - записать новое значение на место этого компонента.

рекомендую выбирать из первых двух.
Будут сложности, пишите, тут подскажут/помогут.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.01.2014, 10:24   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Serge_Bliznykov, почему сразу категорично?) ведь в моем вложении и есть работа именно с типизированным файлом, но расширение да, текстовое. Причем алгоритм по удалению отрицательных чисел реализован через массив затем файл перезаписывается, или я вас не так понял?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 30.01.2014, 15:13   #8
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
например, с чего Вы решили, что автору топика нужен ТЕКСТОВЫЙ файл?!
Цитата:
Сообщение от tane Посмотреть сообщение
1.Какой создать файл(txt...) ?
Не надо валить вину на нас, из за неумения автором задавать вопросы.

Последний раз редактировалось doktor255; 30.01.2014 в 15:16.
doktor255 вне форума Ответить с цитированием
Старый 30.01.2014, 17:06   #9
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Не надо валить вину на нас, из за неумения автором задавать вопросы.
Он спросил! Какой файл создать?
дополняя текст txt? bmp? bin? dat? mp3?
ZuBy вне форума Ответить с цитированием
Старый 30.01.2014, 18:27   #10
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Извиняюсь за неумение додумывать.
doktor255 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 85 тыс рублей в месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить в файле q все компоненты файла f являющиеся точными квадратами (Pascal) Ziner_Fisher Помощь студентам 2 02.12.2013 14:11
Файловый тип данных: Вывести на экран все отрицательные компоненты файла Lera64 Паскаль, Turbo Pascal, PascalABC.NET 1 23.05.2013 08:12
Дан файл целых чисел. Удалить из него все отрицательные числа vaako Паскаль, Turbo Pascal, PascalABC.NET 5 12.04.2012 22:45
Записать в файл g все компоненты файла f, которые являются полными квадратами. loloverg Помощь студентам 1 20.05.2010 04:36
в начале все отрицательные, затем все положительные элементы в матрице motaro Паскаль, Turbo Pascal, PascalABC.NET 2 07.03.2008 19:16