Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];
ВнизЧтение файла txt Найти похожие ветки
← →
Morgan128 (2008-11-13 13:00) [0]Добрый день.
Дано: Есть текстовый файл с кучей строк, в каждой строке записаны цифры, разделённые символами ", " (запятая и пробел).
Вопрос: как в цикле считать цифры до запятой, потом пропустить два символа (запятая и пробел) и считать следующие цифры до след. запятой... и т.д.?
← →
Сергей М. © (2008-11-13 13:02) [1]Велика ли "куча" ?
И обязателен ли цикл ?
← →
Anatoly Podgoretsky © (2008-11-13 13:17) [2]> Morgan128 (13.11.2008 13:00:00) [0]
StringReplace+StringList
← →
Anatoly Podgoretsky © (2008-11-13 13:21) [3]> Anatoly Podgoretsky (13.11.2008 13:17:02) [2]
Или CommaText, возможны артефакты
← →
Юрий Зотов © (2008-11-13 13:52) [4]Если количество чисел в каждой строке одинаково, то самое простое - это убрать запятые (поскольку не нужны) и читать обычными Read/ReadLn в двойном цикле из тестового файла. Что-то типа этого:
type
TRow = array[1..N] of integer;
TArr = array of TRow;
var
Arr: TArr;
i := 0;
while not EoF(F) do
begin
Inc(i);
SetLength(Arr, i);
for j := 1 to N do
Read(F, Arr[i-1][j]);
if not EoF(F) then
ReadLn(F)
end;
А если количество чисел в каждой строке разное, то можно сделать так же, но чуть сложнее:
type
TRow = array of integer;
TArr = array of TRow;
var
Arr: TArr;
i := 0;
while not EoF(F) do
begin
Inc(i);
SetLength(Arr, i);
j := 0;
while not EoL(F) do
begin
Inc(j);
SetLength(Arr[i-1], j);
Read(F, Arr[i-1][j-1])
end;
if not EoF(F) then
ReadLn(F)
end;
Недостаток такого кода - многократное перераспределение памяти, но если файл не огромный, то это не страшно. Кстати, если в начало файла записать количество строк в нем, а в начало каждой строки записать количестов чисел в ней, то и многократного перераспределения памяти можно избежать (читаем число и сразу ставим SetLength, не в цикле).
← →
Morgan128 (2008-11-13 15:59) [5]Кусок файла:
205, 199, 193, 178, 163, 156, 140, 133, 123, 111, 99, 92, 85,
146, 138, 133, 121, 109, 101, 95, 91, 86, 81, 79, 82, 85,
100, 96, 94, 91, 88, 87, 83, 84, 85, 85, 84, 83, 82, 81,
Каждая цифра - яркость пикселя, соответствует рисунку. Количество значений в строке одинаковое, но как видите цифры разные. Разделение никак не убрать.
Куча... ну представте себе изображение 640х480. Это примерно 307200 пикселей. Вот такая куча. А если изображение больше...
Цикл... ну не знаю я, может еще как это все можно обработать :) можно так, но это ведь и есть цикл:
for y:=0 to Bitmap.Height do
begin
for x:=0 to Bitmap.Width do
begin
// обработка данных
end;
end;
← →
Сергей М. © (2008-11-13 16:00) [6]
> Morgan128 (13.11.08 15:59) [5]
Ты вообще разницу между цифрой и числом понимаешь ?
← →
Morgan128 (2008-11-13 16:05) [7]
> как в цикле считать цифры до запятой,
цифры до запятой (от одной до трех) составляют число.
С тем же успехом могу спросить
как в цикле считать число до запятой,
И нефиг меня принимать за дауна.
← →
Сергей М. © (2008-11-13 16:12) [8]
> С тем же успехом могу спросить
Успех был бы другим, если бы ты сразу сделал такое одолжение)
> 640х480
Не такая уж и большая куча.
Вполне можно загрузить ее в StringList, а затем для каждого элемента списка выполнить [2]
← →
Anatoly Podgoretsky © (2008-11-13 16:16) [9]> Morgan128 (13.11.2008 15:59:05) [5]
Ну и зачем тут текстовый файл?
← →
Morgan128 (2008-11-13 16:19) [10]1. а если 1200х1024? StringList поможет?
2. Мне эти данные нужны и не раз. Массив все время под них держать?
← →
Сергей М. © (2008-11-13 16:23) [11]
> если 1200х1024? StringList поможет?
Для считывания и врем.хранения обрабатываемых строк от stringlist"а лучше будет отказаться в пользу построчного считывания (см. [4])
А для разбора каждой прочитанной строки вполне пойдет и [2] и [4]
← →
Morgan128 (2008-11-13 16:30) [12]Либо я туплю, либо 5 лет назад объясняли доступнее.
[4] ведь предлагается удалить разделение запятыми. Как тогда выбрать между числом 123 и числом 45 если будет читаться как 12345?
[2] краткость - сестра таланта.
Придется как-то по другому решать проблему, так как реальной подсказки в решении задачи не вижу.
Спасибо за участие.
← →
Anatoly Podgoretsky © (2008-11-13 16:34) [13]> Morgan128 (13.11.2008 16:30:12) [12]
Ты, у тебя разделение не запятыми, а запятой и пробелом. Если убрать хапятую, то 12345 ну никак не получится.
← →
Германн © (2008-11-13 16:35) [14]
> Либо я туплю, либо 5 лет назад объясняли доступнее.
> [4] ведь предлагается удалить разделение запятыми. Как тогда
> выбрать между числом 123 и числом 45 если будет читаться
> как 12345?
Точно тупишь. Запятые удалишь, но пробелы то останутся.
← →
Morgan128 (2008-11-13 16:35) [15]и что?
КАК СЧИТАТЬ ДО ПРОБЕЛА???
← →
Сергей М. © (2008-11-13 16:36) [16]
> Morgan128 (13.11.08 16:30) [12]
> [4] ведь предлагается удалить разделение запятыми
[4] упомянут лишь в части образца построчного чтения, а не обработки прочитанных строк
> Как тогда выбрать между числом 123 и числом 45 если будет
> читаться как 12345?
А вот в этой части как раз и упомянут [2]
Что тебе там не понятно ?
← →
Сергей М. © (2008-11-13 16:38) [17]
> Morgan128 (13.11.08 16:35) [15]
Ты откровенно тупишь)
Тебе в [2] был намек на возможность воспользоваться встроенными возможностями TStringList для разбиения строки, а ты до сих пор не сделал в эту сторону ни лжного телодвижения.
← →
Германн © (2008-11-13 16:41) [18]
> Morgan128 (13.11.08 16:35) [15]
>
> и что?
> КАК СЧИТАТЬ ДО ПРОБЕЛА???
>
Ну тогда
> Придется как-то по другому решать проблему, так как реальной
> подсказки в решении задачи не вижу.
> Спасибо за участие.
>
← →
Morgan128 (2008-11-13 16:42) [19]как я сделаю какое-то движение, если у меня в делфе нет хелпа? Тупа забью StringReplace и буду любоваться?
Был бы хелп, меня на этом форуме еще лет 5 никто бы не видел.
← →
Anatoly Podgoretsky © (2008-11-13 16:48) [20]> Morgan128 (13.11.2008 16:42:19) [19]
Тогда ты не делом занимаешь.
Срочно отложить другие дела и поставить справку.
И лучше CommaText
← →
sniknik © (2008-11-13 16:54) [21]> если у меня в делфе нет хелпа?
давно уже предлагал, за такие высказывания просто закрывать ветки.
т.к. автор попросту мозг всем парит... а это один из показателей.
> Срочно отложить другие дела и поставить справку.
а как же тогда клевые отмазки для "выдавливания" кода из упрямых мастеров?
← →
Сергей М. © (2008-11-13 16:56) [22]
> у меня в делфе нет хелпа
Спасибо за очередное одолжение - к 19-му посту мы наконец-то начинаем узнавать тщательно скрываемые тобой тайные подробности)
> Был бы хелп
Что, и Гугль молчит ?!
> Тупа забью StringReplace и буду любоваться?
После StringReplace тупо открываешь скобку и тупо любуешься именами формальных параметров, по которым тупо догадываешься об их назначении.
← →
Плохиш © (2008-11-13 17:42) [23]А после
> Morgan128 (13.11.08 16:30) [12]
> Либо я туплю, либо 5 лет назад объясняли доступнее.
он мне начал нравиться 5 лет и ничему не научился
Но после
> Morgan128 (13.11.08 16:42) [19]
> как я сделаю какое-то движение, если у меня в делфе нет
> хелпа?
не могу согласиться с его просьбой
> И нефиг меня принимать за дауна.
← →
Юрий Зотов © (2008-11-13 18:04) [24]Morgan128 (13.11.08 16:05) [7]
> как в цикле считать число до запятой
Хоть до запятой, хоть до пробела, хоть до чего угодно еще:
var
Ch: char;
Result: cardinal;
============
Result := 0;
Ch := "0";
while Ch in ["0".."9"] do
begin
Result := Result * 10 + Ord(Ch) - Ord("0");
Читаем Ch;
end;
> И нефиг меня принимать за дауна.
Не даун, конечно, но со знаниями действительно беда. Да и код выше можно было бы придумать самому. Не бином Ньютона.
=============================
А что, разве у Bitmap"а нет готовых методов сохранения в файл и загрузки из файла? Зачем изобретать велосипеды?
Тем более, что попиксельное сохранения Bitmap"а в текстовый файл, да еще и с разделением запятыми - это даже не просто велосипед, а велосипед чудовищный.
← →
Сергей М. © (2008-11-13 18:37) [25]
> Количество значений в строке одинаковое
> 205, 199, 193, 178, 163, 156, 140, 133, 123, 111, 99, 92, 85, //итого 13
> 146, 138, 133, 121, 109, 101, 95, 91, 86, 81, 79, 82, 85, //тоже 13
> 100, 96, 94, 91, 88, 87, 83, 84, 85, 85, 84, 83, 82, 81, // а здесь 14
Вот как после этого понимать Саида ?)
То у него цифры это числа, то 13 = 14, то справку потерял, то другую предъявил что, мол, не даун .
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.057 c