Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
6-1076661575
bykopor
2004-02-13 11:39
2004.04.18
INDY, компонент TCP/IP


8-1072441370
Archi Gudvin
2003-12-26 15:22
2004.04.18
самодельный плеер


1-1080542869
Brain Force
2004-03-29 10:47
2004.04.18
Как обратиться к форме из DLL в приложении???


3-1079985015
td
2004-03-22 22:50
2004.04.18
BeforePost и LookUp поле


1-1080551125
Insert
2004-03-29 13:05
2004.04.18
Обращение к файлу?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский