Текущий архив: 2004.04.18;
Скачать: CL | DM;
ВнизФайл . И , Найти похожие ветки
← →
an-na2002 (2004-03-26 06:03) [0]Я читаю данные из файла. Как сделать чтобы программа работаланезависимо от разделителя в файле?
← →
Fay © (2004-03-26 06:12) [1]Если в файле лежит текст вида "Ля-ля, 3 рубля. а,б.в.г,", то весьма затрунительно. Уточните вопрос.
← →
an-na2002 (2004-03-26 06:13) [2]В файле только цифры.
← →
Fay © (2004-03-26 06:16) [3]Можно примерчик данных и результатов?
← →
Fay © (2004-03-26 06:23) [4]А ваще-то замените все "неудобные" символы на "удобные" 8)
← →
an-na2002 (2004-03-26 07:11) [5]Данные
0.3 10.5
0.5 50
1 56.76
Результат
8.48447204968944E-0001 2.27699483133000E-0002
8.50221827861579E-0001 2.40961889905597E-0002
8.51996450754215E-0001 2.46982901911426E-0002
8.53771073646850E-0001 2.52693122322569E-0002
← →
ЮЮ © (2004-03-26 07:18) [6]а пару слов, как из таких данных вы хотите получить такие результаты?
← →
Fay © (2004-03-26 07:19) [7]Ну и кто тут разделитель чего-то? И что он разделяет?
← →
an-na2002 (2004-03-26 07:28) [8]В файле данных раздель точка, а может быть запятая. Как сделать чтобы программа независила от ентого?
← →
Fay © (2004-03-26 07:30) [9]см Fay © (26.03.04 06:23) [4].
← →
an-na2002 (2004-03-26 07:32) [10]А в тексте программы нельзя см: Fay[4][9]
← →
Fay © (2004-03-26 07:34) [11]Не понял. Попробуйте выразиться яснее.
← →
mfender © (2004-03-26 07:35) [12]Нельзя. Компутер - не человек. Ему нужно точно знать, что является DecimalSeparator. Точка или запятая.
← →
Fay © (2004-03-26 07:39) [13]Берём текст. Меняем все нецифры_неразделители_непробелы_неCRLF на разделитель. Тащимся.
← →
an-na2002 (2004-03-26 07:42) [14]А как меняем?
← →
Fay © (2004-03-26 07:47) [15]В цикле, конечно! Ты файл-то как читаешь? Покажи.
← →
mfender © (2004-03-26 07:53) [16]an-na2002 (26.03.04 07:42)
А как меняем?
Вобщем, в цикле построчно, что-то типаStringReplace("0.3 10.5 0.5 50 1 56.76", ".", ",",[rfReplaceAll])
← →
Fay © (2004-03-26 07:56) [17]StringReplace дюже тормозной.
← →
an-na2002 (2004-03-26 07:57) [18]Fay[15]
----------------
while not Eof(Vf) do
begin
read(Vf,w,t);
-------------
------------
end;
------------
← →
mfender © (2004-03-26 07:57) [19]
> Fay © (26.03.04 07:56) [17]
> StringReplace дюже тормозной.
Ну, если файл метров на 5, то конечно...
← →
Fay © (2004-03-26 08:03) [20]Блин! У меня от этих AssignFile и Rewrite мозги раком встают.
Такое ощущение, что ReadFile отменили 8).
Скажи, а w,t - это кто?
← →
an-na2002 (2004-03-26 08:15) [21]w=0.3 t=10.5
w=0.5 t=50
w=1 t=56.76
см: [5]
← →
mfender © (2004-03-26 08:21) [22]Ага. Теперь понятно....
Т.е. получаем со строки значения для двух пременных. А интересует, видимо, разделитель между значениями? Чтобы он был незначительно какой? Т.е. типа:
0.3/10.5
0.5|50
1?56.76
и чтобы все это правильно читалось? Или я опять не так понял?
← →
an-na2002 (2004-03-26 08:56) [23]Нет интересует разделитель целой и дробной части числа
← →
Reindeer Moss Eater © (2004-03-26 08:59) [24]Дешевле программно понять какой разделитель использовался при формировании файла и изменить свой DecimalSeparator и разделитель тысяч чем делать реплейс по всему файлу
← →
an-na2002 (2004-03-26 09:04) [25]И как это сделать?
cm:[24]
← →
Reindeer Moss Eater © (2004-03-26 09:08) [26]Взять первое число файла.
Найти символ отличный от "0".."9".
Это разделитель который используется в файле.
← →
an-na2002 (2004-03-26 09:21) [27]Поконкретней для дудаков?
← →
Anatoly Podgoretsky © (2004-03-26 09:22) [28]Reindeer Moss Eater © (26.03.04 08:59) [24]
Дешевое программиста нанять.
← →
Reindeer Moss Eater © (2004-03-26 09:26) [29]Сначала поконкретней вопрос задай
← →
han_malign © (2004-03-26 09:31) [30]Что вы на человека набросились, нет бы объяснить, что для "интелектуальной" выборки чисел из текстового файла, нужно пользоваться не встроенным форматированным чтением read(file, double,double), а сначала читать строку ReadLn(file,string), разбивать строку на слова, заменять "," на ".", и пользоваться процедурой Val для каждого слова.
← →
Reindeer Moss Eater © (2004-03-26 09:33) [31]А разве этого нет?
Дошло же дело у него до ошибки преобразования строки в число.
← →
an-na2002 (2004-03-26 09:37) [32]Как найти символ отличный от "0".."9"и изменить свой DecimalSeparator. Поконкретней для дудаков? 0:((.
← →
Anatoly Podgoretsky © (2004-03-26 09:38) [33]<> "0"
← →
Reindeer Moss Eater © (2004-03-26 09:38) [34]1.
var c : Char;
begin
if not (c in ["0".."9"]) then ...
2.
DecimalSeparator:=MyValue;
← →
Reindeer Moss Eater © (2004-03-26 09:40) [35]han_malign
Не учите отвечающих отвечать.
Учите спрашивающих задавать вопросы.
Полезнее.
← →
han_malign © (2004-03-26 09:58) [36]>Не учите
- если человек(и похоже не один) просто не понимает, чем форматированные ввод отличается от строкового, то он просто не догадывается, что вы от него требуете, хотя по приведенному коду сразу видно, что ни StringReplace, ни с in[...], ну никак не применить к переменным типа Double.
З.Ы. Ох не зря на "Мастеров" бочки иной раз катят...
З.З.Ы. Тут кода на десять минут, но мне сейчас в другую комнату перезжать. Часа через два, если отношение "Мастеров" не изменится, накидаю...
← →
zamkom © (2004-03-26 09:59) [37]Господа вам не кажется, что данная ветка достойна орешника :))
← →
blackman © (2004-03-26 10:51) [38]>zamkom © (26.03.04 09:59) [37]
Нет еще, погоди, подождем, что han_malign ответит :)
И
>Anatoly Podgoretsky © (26.03.04 09:38) [33]
явно зажал "9"
должен дописать...
Так что рано переносить :)
← →
SergP © (2004-03-26 12:24) [39]an-na2002
Ну а если вручную файл разбирать и все что там встречается кроме нужных символов, считать разделителями?
← →
an-na2002 (2004-03-26 12:27) [40]Удалено модератором
Примечание: Offtopic
← →
Digitman © (2004-03-26 14:13) [41]
> an-na2002
> а если
а если не секрет, что за "кривые ручки" или "кривая программа" могла сформировать такой файл ? Кто этим самым причинным местом "кушал", когда формировал эту солянку ?
← →
Digitman © (2004-03-26 14:18) [42]могу, конечно, предположить , что "кривая программа" - не твоя собственная, и у тебя не было возможности повлиять на ее работу, дабы она формировала одни и те же дес.разделители ..
но ведь программа-то наверняка брала системные рег.установки на момент старта ! .. и, вероятно, какой-то чукча-юзер баловался от нефига делать рег.установками перед запуском программы ...что, никак нельзя было хряснуть его по рукам, чтобы не лез туда, куда ему, чукче, не следует ? коль такие вот дела происходят ?
← →
Плохиш (2004-03-26 14:26) [43]
> an-na2002 (26.03.04 09:37) [32]
> Поконкретней для дудаков? 0:((.
Дудаки должны улицы мести.
> zamkom © (26.03.04 09:59) [37]
> Господа вам не кажется, что данная ветка достойна орешника
Чем?
Она достойна только LMD
← →
han_malign © (2004-03-26 16:31) [44]
program Parse;
{$APPTYPE CONSOLE}
uses Windows;
function ParseReal(var aOffs: integer; const aStr: string; var aValue: extended): boolean;
var len, nDots: integer;
sVal: string;
begin
len:=Length(aStr); if(aOffs<=0)then aOffs:=0;
while((aOffs<=len)and not(aStr[aOffs]in[",",".","0".."9"]))do inc(aOffs);
sVal:="";nDots:=0;
//
while((aOffs<=len)and(aStr[aOffs]in[",",".","0".."9"])and(nDots<=1))do begin
if(aStr[aOffs]in[",","."])then begin
inc(nDots);
if(nDots<=1)then sVal:=sVal+".";
end else sVal:=sVal+aStr[aOffs];
inc(aOffs);
end;
Result:=sVal<>"";
if(Result)then Val(sVal,aValue,len) else aValue:=0;
Result:=Result and (len=0);
end;
var Vf: Text;
w,t : extended;
res, offs: integer;
sLine: string;
begin
if(ParamCount<1)then WriteLn("Usage: Parse.exe <file name>")
else begin
AssignFile(Vf,ParamStr(1));
{$I-}Reset(Vf);{$I+}
res:=IOResult;
if(res<>0)then WriteLn("Error ",res," on file ",ParamStr(1)," open")
else begin
while(not Eof(Vf)) do begin
ReadLn(Vf,sLine);
offs:=1;
if(ParseReal(offs,sLine,w)and ParseReal(offs,sLine,t))then begin
{...}
Writeln("Process pair(",w,"",t,")");
end else Writeln("Error on value pair parsing in "",sLine,""");
end;
end;
end;
end.
text.txt
1.1 1,2
2.1,2,2
3/.3
>Parse text.txt
Process pair( 1.10000000000000E+0000 1.20000000000000E+0000)
Process pair( 2.10000000000000E+0000 2.20000000000000E+0000)
Process pair( 3.00000000000000E+0000 3.00000000000000E-0001)
← →
han_malign © (2004-03-26 16:34) [45]>> Господа вам не кажется, что данная ветка достойна орешника
- исключительно из-за ответов, сами все когда-то такими "лохами" были...
З.Ы. Интернет дали только 15 минут назад...
← →
Reindeer Moss Eater © (2004-03-26 16:37) [46]Через 15 минут медаль дадут
← →
han_malign © (2004-03-26 17:14) [47]>Reindeer Moss Eater ©
- а на хрена попу гармонь?
← →
Плохиш (2004-03-26 17:22) [48]>han_malign © (26.03.04 16:34) [45]
> сами все когда-то такими "лохами" были...
Когда мы были такими "лохами", мы шли в магазИн, покупали умные книжки и читали их. А кто так не делал, тот сейчас улицы метёт или под забором пьяный валяется и хает эту паскудную жизнь.
← →
han_malign © (2004-03-26 17:31) [49]>Плохиш (26.03.04 17:22) [48]
- не надо сравнивать вопросы типа "как прочитать файл", и "алгоритм считывания вещественных чисел из текстового файла, адаптивный к формату данных"
← →
Плохиш (2004-03-26 17:39) [50]
> han_malign © (26.03.04 17:31) [49]
Не надо расказывать, что способности находить решения зависят от поставленной задачи
← →
DCoder © (2004-03-27 11:28) [51]Если файл большой, то его стоит отобразить в памяти. Это увеличит скорость выполнения задачи.
Страницы: 1 2 вся ветка
Текущий архив: 2004.04.18;
Скачать: CL | DM;
Память: 0.57 MB
Время: 0.05 c