Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Вниз

Из текста в SQL-базу   Найти похожие ветки 

 
big_johnson ©   (2006-10-27 11:23) [0]

Есть задача: текстовый файл, который обновляется очень часто, формат следующий:
Лишние_строки_1
Лишние строки_2
[секция_1]
переменная_1=значени_1
переменная_2=значение_2
[секция_2]
переменная_3=значени_3
переменная_4=значение_4
и т.д.
вопрос: хотелось бы растаскивать периодически "значения_х" в сиквел таблицу формата (переменная_1 varchar(), переменная_2 varchar() и т.д.). Поможите советом или сцилкой.


 
Desdechado ©   (2006-10-27 11:28) [1]

TIniFile, TADOConnection, TADOCommand


 
Сергей М. ©   (2006-10-27 11:44) [2]


> и т.д.


Вот тут самое интересное.
И чему в пределе равно х ?


 
ЮЮ ©   (2006-10-27 11:55) [3]


> хотелось бы растаскивать периодически "значения_х" в сиквел
> таблицу


А оно это надо, если текстового файла хватает?


> в сиквел таблицу формата (переменная_1 varchar()


А про [секция_1], [секция_2] забыл? :)

Лучше бы привел реальные пару секций


 
big_johnson ©   (2006-10-27 12:25) [4]

текстового файла действительно не хватает. Реально программа от погодного какого-то устройства. Всё храница во внутреннем формате и единственное, что есть, что можно распатронить - это текстовый файл, который обновляется каждую минуту. Вот эти данные и нужно перегружать, чтобы их потом можно было ковырять, в смысле делать отчёты из них, данных будет много, поэтому в сиквел.
Реальная пара секций:
[indoor_temperature]
deg_C = "24.4"
deg_F = "75.9"

[outdoor_temperature]
deg_C = "6.9"
deg_F = "44.4"

[indoor_humidity]
percent = "33"

[outdoor_humidity]
percent = "62"

[dewpoint]
deg_C = "0.1"
deg_F = "32.2"

[windchill]
deg_C = "4.8"
deg_F = "40.7"


 
big_johnson ©   (2006-10-27 12:29) [5]

текстового файла действительно не хватает. Реально программа от погодного какого-то устройства. Всё храница во внутреннем формате и единственное, что есть, что можно распатронить - это текстовый файл, который обновляется каждую минуту. Вот эти данные и нужно перегружать, чтобы их потом можно было ковырять, в смысле делать отчёты из них, данных будет много, поэтому в сиквел.
Реальная пара секций:
[indoor_temperature]
deg_C = "24.4"
deg_F = "75.9"

[outdoor_temperature]
deg_C = "6.9"
deg_F = "44.4"

[indoor_humidity]
percent = "33"

[outdoor_humidity]
percent = "62"

[dewpoint]
deg_C = "0.1"
deg_F = "32.2"


 
big_johnson ©   (2006-10-27 12:33) [6]

чота бравузер подвисал, поэтому получилось дважды, сорри


 
Сергей М. ©   (2006-10-27 12:35) [7]


> big_johnson


Теперь понятно.

Ну и какие собственно у тебя проблемы в связи с этим ?


 
ЮЮ ©   (2006-10-27 12:42) [8]

Реальная пара секций:

Я так полагаю, количество секций и переменных в них, со временеи не меняются. А меняются данные. И теперь хочется сохранить эти данные в динамике, ибо файл один и содержит только актуальные значения


 
big_johnson ©   (2006-10-27 12:45) [9]

проблема в том, что в дельфях я не бельмеса, хотелось бы получить совет как начать, мож какие реальные ссылки...


 
big_johnson ©   (2006-10-27 12:48) [10]

веть конференция для начинающих, а решение кроме как через дельфи - не вижу: быстро и не так сложно, а опыт в сиквеле большой...


 
Сергей М. ©   (2006-10-27 12:51) [11]


> big_johnson ©   (27.10.06 12:45) [9]



> хотелось бы получить совет как начать


Начни с вопроса "Как удалить строки из текстового файла"


 
Anatoly Podgoretsky ©   (2006-10-27 15:08) [12]

Интерсно откуда берется файл и неизменно ли его содержимое до конца обработки.


 
big_johnson ©   (2006-10-30 11:54) [13]

спасибо, начал разбираться, вот только маленький вопрос - как во всём файле убрать двойные кавычки?


 
ЮЮ ©   (2006-10-30 11:58) [14]

по-строчно. Ты ведь все-равно будешь его построчно обрабатывать.
AnsiReplaceText, например.


 
Anatoly Podgoretsky ©   (2006-10-30 12:05) [15]

По единице обработки.


 
MikePetrichenko ©   (2006-10-30 12:23) [16]


> проблема в том, что в дельфях я не бельмеса

Это основная проблема. :)
Напиши на сях. На асме, на Форте, на Фортране, ну что там еще есть. Короче на том, что знаешь.
P.S. Кстатит, сие можно сделать на Oracle без клиента прямо из SQL (из пакетов). Так что область решений не ограничена Delphi. Да и на MSSQL тоже можно (по-моему).


 
sniknik ©   (2006-10-30 12:52) [17]

> Да и на MSSQL тоже можно (по-моему).
основная проблема будет как отследить появление новых данных в том же (по имени) файле... нет файловых событий от системы... если по таймеру job, на раз в 5мин/1мин обработку файла повесить (и неважно обновился он там, нет, или уже с десяток раз пропустили), то можно.
синхронизировать точно, устройство-job по времени вряд ли удастся... не реал тайм.

кстати почемуто думаю что в оракле будет таже проблема.
да и в дельфях... как узнавать когда отрабатывать, если файл тем устройством меняется но не закрывается/пере-создается и т.д. (то что можно отследить), т.е. если он в начале сеанса открывается и закрывается только в конце работы? (есть разве системное событие "завершение одного редактирования"???)


 
big_johnson ©   (2006-11-01 13:18) [18]

вот чо состряпал, тока не работате и ошибок при компиляции не выдаёт. Не знаю куда подаца. Процедура вся здесь, т.к. писАл без формы.
program hw;
uses
 SysUtils,
 Windows,
 IniFiles,
 ADODB;

Var InDir,OutDir:String;
Var IniFile:TIniFile;
Var ActualisationDateString,IndoorTemperature,OutdoorTemperature,IndoorHumidity,
   OutdoorHumidity,DewPoint,WindChill,WindSpeed,WindDirection,
   RainTotal,Rain24H,Rain1H,PressureAbsolute,PressureRelative,nQuery:String;
Var LocalSQLConnection: TADOConnection;
Var Query: TADOQuery;

begin
//копируем файл из каталога heavy_weather
InDir:="\\H002-asu-00\hw\";
OutDir:="e:\work\hw\";
CopyFile(PChar(InDir+"currdat.lst"),PChar(OutDir+"currdat.txt"),false);

//открываем файл
IniFile := TIniFile.Create("e:\work\hw\currdat.txt");

//присваиваем переменные
ActualisationDateString := IniFile.ReadString("time", "last_actualisation_date_string", "");
IndoorTemperature := IniFile.ReadString("indoor_temperature", "deg_C", "");
OutdoorTemperature := IniFile.ReadString("outdoor_temperature", "deg_C", "");
IndoorHumidity := IniFile.ReadString("indoor_humidity", "percent", "");
OutdoorHumidity := IniFile.ReadString("outdoor_humidity", "percent", "");
DewPoint := IniFile.ReadString("dewpoint", "deg_C", "");
WindChill := IniFile.ReadString("windchill", "deg_C", "");
WindSpeed := IniFile.ReadString("wind_speed", "mps", "");
WindDirection := IniFile.ReadString("wind_direction", "name", "");
RainTotal := IniFile.ReadString("rain_total", "mm", "");
Rain24H := IniFile.ReadString("rain_24h", "mm", "");
Rain1H := IniFile.ReadString("rain_1h", "mm", "");
PressureAbsolute := IniFile.ReadString("pressure_absolute", "inHg", "");
PressureRelative := IniFile.ReadString("pressure_relative", "inHg", "");
IniFile.Free;

//подключаемся к БД
     LocalSQLConnection := TADOConnection.Create(nil);
     LocalSQLConnection.ConnectionString :=
     "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In" +
     "fo=False;Initial Catalog=Northwind;Data Source=(local)";
     Query := TADOQuery.Create(nil);
     Query.DataSource.Create(LocalSQLConnection);
     Query.Connection := LocalSQLConnection;
     LocalSQLConnection.Connected := True;
     Query.Create(nil);
LocalSQLConnection.DefaultDatabase := "Northwind";
LocalSQLConnection.Provider := "SQLOLEDB.1";

nQuery :=
"insert northwind..heavy_weather select pr_time = " + ActualisationDateString +
     ", upload_time = getdate() " +
     ", indoor_temperature = " + IndoorTemperature +
     ", outdoor_temperature = " + OutdoorTemperature +
     ", indoor_humidity = " + IndoorHumidity +
     ", outdoor_humidity = " + OutdoorHumidity +
     ", dewpoint = " + DewPoint +
     ", windchill = " + WindChill +
     ", wind_speed = " + WindSpeed +
     ", wind_direction = " + WindDirection +
     ", rain_total = "  + RainTotal +
     ", rain_24h = "  + Rain24H +
     ", rain_1h = " + Rain1H +
     ", pressure_absolute = " + PressureAbsolute +
     ", pressure_relative = " + PressureRelative ;

Query.SQL.Text := nQuery;
Query.Open;
Query.Close;

end.


 
ЮЮ ©   (2006-11-02 03:21) [19]


> тока не работате и ошибок при компиляции не выдаё


Даже в рантайм должна ругаться на Query.Open ибо надо Query.ExecSQL
Да и синтаксис у INSERT несколько другой. Так что и здесь должна была обругать


 
MikePetrichenko ©   (2006-11-02 04:03) [20]


> основная проблема будет как отследить появление новых данных

Ну почему же нет. Есть. Можно даже свою DLL прицепить, которая что угодно отследит.
По поводу изменения файла. Решений тоже много. Вопрос трудозатрат. В худшем случае - перехват API функций записи в файл.
В лучшем - действительно JOB. Какая разница изменился он или нет. Это можно проверить сравнив с предыдущим результатом чтения из файла.
Опять же - вопрос трудозатрат и целесообразности.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.045 c
4-1152095200
Daber
2006-07-05 14:26
2006.11.19
Как определить существование Мыши в WinXP?


3-1158398640
stfu
2006-09-16 13:24
2006.11.19
Проблема с загрузкой данных из MySQL


2-1162562295
~Aid~
2006-11-03 16:58
2006.11.19
ProcessMessages


2-1162301177
LiberlX
2006-10-31 16:26
2006.11.19
Закрытие модального окна


15-1162362340
Виджет
2006-11-01 09:25
2006.11.19
Апгрейд





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