Temat: Odczyt linii z pliku txt

Witam

Czy jest jakaś możliwość odczytania w prosty sposób drugiej linii z pliku txt ?
Otrzymuje plik txt o jakieś dziwnej nazwie. W jego drugiej linii jest jego prawidłowa nazwa. Chcę zmienić mu nazwę na odpowiednią. W drugiej linii mam opis typu:

NAME: nazwa_pliku

Na razie zrobiłem to tak, że wczytuje każdy plik przy pomocy procedury. Dostaję się do drugiego wiersza. Sprawdzam czy jest tam wpisany tekst NAME:, jeśli tak to pobieramy to co jest za nim, a następnie zmieniam przy pomocy xp_cmdShell.

Jest to mało optymalne rozwiązanie wczytywać cały plik, żeby odczytać tylko jedną linię. Można to jakoś inaczej zrobić.

pozdrawiam i dziękuję za odpowiedź

konto usunięte

Temat: Odczyt linii z pliku txt

Oczywiście, że tak.

http://php.net/manual/pl/function.fopen.php - otwiera plik.

http://php.net/manual/pl/function.fgets.php - wczytuje linię.


function readSpecificLine($file, $line)
{
$fin = @fopen($file, 'r');

if( $fin )
{
for($i = 0; $i < $line; $i++)
{
$ret = fgets($fin);

if( $ret === false )
{
break;
}
}

fclose($fin);
}

return $ret;
}


Ew. http://www.php.net/manual/pl/splfileobject.seek.php - ale niekoniecznie będzie to wydajniejsze.

Proponuję, abyś w zamian za pomoc przeprowadził testy wydajnościowe:
- Twojej aktualnej metody,
- metody zaprezentowanej przeze mnie,
- metody zaprezentowanej w manualu PHP.

i zaprezentował tu ich wyniki. W sumie fajna i pożyteczna zabawa ;)

// EDIT: Moja metoda była napisana na sucho, tutaj, więc ew. popraw błędy ;)Łukasz K. edytował(a) ten post dnia 25.11.11 o godzinie 16:42

konto usunięte

Temat: Odczyt linii z pliku txt

cat <file> | head -n 2 | tail -n 1

Czy coś w tym stylu.

Temat: Odczyt linii z pliku txt

Nie dodałem podstawowej rzeczy. Dawno tu nie pisałem.
Chodzi mi o SQLa.

konto usunięte

Temat: Odczyt linii z pliku txt

Jakub Purtal:
cat <file> | head -n 2 | tail -n 1

Czy coś w tym stylu.

sed -n '2p' <file>


:P

konto usunięte

Temat: Odczyt linii z pliku txt

Byłem przekonany, że to forum PHP :D Przepraszam :)

Co do czytania plików za pomocą SQL... on do tego jest tak w ogóle? Nie wydaje mi się. W ogóle pomysł jest dla mnie dziwny.

O jaki silnik bazodanowy Ci chodzi?

konto usunięte

Temat: Odczyt linii z pliku txt

Łukasz K.:
O jaki silnik bazodanowy Ci chodzi?

Skoro xp_cmdshell to Transact-SQL:
http://msdn.microsoft.com/en-us/library/ms175046.aspx

konto usunięte

Temat: Odczyt linii z pliku txt

sp_configure 'show advanced options', 1;
RECONFIGURE;
go
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

create function dbo.SplitString
(
@str nvarchar(4000),
@separator char(1)
)
returns table
AS
return (
with tokens(p, a, b) AS (
select
1,
1,
charindex(@separator, @str)
union all
select
p + 1,
b + 1,
charindex(@separator, @str, b + 1)
from tokens
where b > 0
)
select
p-1 zeroBasedOccurance,
substring(
@str,
a,
case when b > 0 then b-a ELSE 4000 end)
AS s
from tokens
)
GO

declare @str nvarchar(4000);
set @str = (SELECT * FROM OPENROWSET(BULK N'e:\import\ccon\ccon.log', SINGLE_CLOB) AS Document)

select zeroBasedOccurance, s from dbo.SplitString (@str,CHAR(13)) as r
where zeroBasedOccurance = 1

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

konto usunięte

Temat: Odczyt linii z pliku txt

Wojciech Gardziński:
CS:
Driver={Microsoft Text Driver (*.txt; *.csv)}; UID=admin; DBQ=D:\AFIN\AFIN.NET\Samples\Data\ODBC\SalesInTXT
+ SQL:
SELECT TOP 1 * FROM (SELECT TOP 2 * FROM [odbiorca.txt]) ORDER BY nazwa DESC

daje:
NAZWA ULICA KOD MIASTO TEL GR_ODB UWAGI PELNA_NAZ1
AREX Strzegomska 62 WROCLAW 71 8979879 HURT AREX S.C.

Tabelka:
http://afin.net/samples/Data/ODBC/SalesInHTML/Odbiorca...

zakładasz że masz jakiś identyfikator po którym będziesz mógł posortować, a to założenie jest błędne z natury

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

Temat: Odczyt linii z pliku txt

Dzięki Przemku.

Skorzystałem z Twojego skryptu. Trochę go zmodernizowałem pod swoje zastosowanie. O to mi właśnie chodziło.
Ja znalazłem coś takiego w internecie, ale jest to strasznie wolne.

CREATE FUNCTION [dbo].[fun_ReadFileAsTable]
(
@Path VARCHAR(255),
@Filename VARCHAR(100)
)
RETURNS
@File TABLE
(
Lno int identity(1,1),
line varchar(8000))

AS
BEGIN

DECLARE @objFileSystem int
,@objTextStream int,
@objErrorObject int,
@strErrorMessage Varchar(1000),
@Command varchar(1000),
@hr int,
@String VARCHAR(8000),
@YesOrNo INT

select @strErrorMessage='opening the File System Object'
EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject' , @objFileSystem OUT

if @HR=0 Select @objErrorObject=@objFileSystem, @strErrorMessage='Opening file "'+@path+'\'+@filename+'"',@command=@path+'\'+@filename

if @HR=0 execute @hr = sp_OAMethod @objFileSystem , 'OpenTextFile'
, @objTextStream OUT, @command,1,false,0--for reading, FormatASCII

WHILE @hr=0
BEGIN
if @HR=0 Select @objErrorObject=@objTextStream,
@strErrorMessage='finding out if there is more to read in "'+@filename+'"'
if @HR=0 execute @hr = sp_OAGetProperty @objTextStream, 'AtEndOfStream', @YesOrNo OUTPUT

IF @YesOrNo<>0 break
if @HR=0 Select @objErrorObject=@objTextStream,
@strErrorMessage='reading from the output file "'+@filename+'"'
if @HR=0 execute @hr = sp_OAMethod @objTextStream, 'Readline', @String OUTPUT
INSERT INTO @file(line) SELECT @String
END

if @HR=0 Select @objErrorObject=@objTextStream,
@strErrorMessage='closing the output file "'+@filename+'"'
if @HR=0 execute @hr = sp_OAMethod @objTextStream, 'Close'

if @hr<>0
begin
Declare
@Source varchar(255),
@Description Varchar(255),
@Helpfile Varchar(255),
@HelpID int
EXECUTE sp_OAGetErrorInfo @objErrorObject,
@source output,@Description output,@Helpfile output,@HelpID output
Select @strErrorMessage='Error whilst '
+coalesce(@strErrorMessage,'doing something')
+', '+coalesce(@Description,'')
insert into @File(line) select @strErrorMessage
end
EXECUTE sp_OADestroy @objTextStream
-- Fill the table variable with the rows for your result set
RETURN
END

Następna dyskusja:

SQL Server 2014 import bazy...




Wyślij zaproszenie do