我有一个大型CSV文件。由于存储器问题(使用MySQL),我想尽可能一次只读取它的一部分。
它的CSV可能并不重要。重要的是它需要用新线切割。
示例内容:
Some CSV content
that will break
on a line break
这可能是我的道路:
$path = 'path/to/my.csv';
在我看来,它的解决方案可能如下所示:
$csv_content1 = read_csv_file($path, 0, 100);
$csv_content2 = read_csv_file($path, 101, 200);
信息
我一直试图阅读其他主题,但没有找到与此问题完全匹配的内容。
也许其中一些可以某种方式起作用?
在我使用$csv_content2
之前,我可能无法使用$csv_content1
,因为我需要保存某种指针?在那种情况下,它很好。无论如何,我会按顺序阅读它们。
答案 0 :(得分:0)
经过深思熟虑和阅读后,我终于认为我找到了解决问题的方法。如果由于内存使用或其他方面这是一个糟糕的解决方案,请纠正我。
首次运行
now()
下次运行
WITH
MEMBER [Measures].[Key for Today] AS
Format
(
Now()
,'yyyyMMdd'
)
MEMBER [Measures].[Today string] AS
'[Date].[Calendar].[Date].&[' + [Measures].[Key for Today] + ']'
MEMBER [Measures].[_YTD] AS
Aggregate
(
YTD([Date].[Calendar].CurrentMember)
,[Measures].[Order Quantity]
)
MEMBER [Measures].[_MTD] AS
Aggregate
(
MTD([Date].[Calendar].CurrentMember)
,[Measures].[Order Quantity]
)
SELECT
{
[Measures].[_YTD]
,[Measures].[_MTD]
} ON COLUMNS
,[Product].[Category].Children ON ROWS
FROM [Adventure Works]
WHERE
StrToMember
(
[Measures].[Today string]
,constrained
) ;
<强>功能强>
$buffer = part($path_to_file, 0, 100);
在我更面向对象的环境中,它看起来更像是这样:
$buffer = part($path_to_file, $buffer['pointer'], 100);