问题标签 [splfileobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 解析基于制表的数据文件 php
我有几个文件要解析(使用 PHP),以便将它们各自的内容插入不同的数据库表中。
第一点:客户给了我 6 个文件,5 个是 CSV,其值用逗号分隔;最后一个不是来自同一个数据库,它的内容是基于表格的。
我构建了一个 FileParser,它使用 SplFileObject 在文件内容的每一行上执行一个方法(基本上,使用每个数据集创建一个实体并将其保存到数据库中,使用 Symfony2 和 Doctrine2)。
但是我无法使用 SplFileObject 解析基于制表的文本文件,它不会像我期望的那样将内容拆分成行...
这可能与我的客户文件的可怕格式有关,但在与他们长时间讨论之后,由于某些可接受的原因(他们方面的限制),他们真的无法为我获得另一种格式,不幸的是。
该文件目前有 49459 行,所以我真的认为内存在这一步很重要;所以我必须让 SplFileObject 工作,但不知道如何。
可以在此处找到该文件的摘录: Data-extract-hosted
php - 将字符串附加到文件的某个位置
假设我们有这个文件 test.txt:
我们想在{
和之间添加文本}
。
我试过这个:
但输出是{test
,我也尝试了其他模式,如w+
(result-> test
)、a+
(result->{}test
编辑:忘了告诉我不想将文件的所有内容加载到内存中,这就是我使用的原因SplFileObject
php - 使用 SplFileObject() 写入文件
我正在尝试使用 SplFileObject() 逐行编辑文件。我可以选择要编辑的文件的行。但是我如何在该行写入一个 $string 呢?
这是我获取该行的代码:
如何在该行插入字符串?
注意,我不想覆盖文件,我只想在给定的行插入一个 $string。
php - RuntimeException SplFileInfo::getSize(): stat failed for... Laravel 4 上传图片
我使用laravel 4 (last update),我创建了一个表单,我们可以在其中上传图像(徽标/头像)。我在MAC OS 上,我使用sublime Text 3、laravel和MAMP Applications。我所有的配置都设置正确,没有运行问题。
我的问题是,当我从表单提交到达字段时出现此错误: RuntimeException SplFileInfo::getSize(): stat failed for /Applications/MAMP/tmp/php/phpRUJfMX
这是我的表单nameOfTheForm.blade.php中的代码:
这是我的控制器的代码:
上传的文件代码完美运行,我在我想要的选定文件夹中注册文件。我的路线没有问题(无需显示这部分代码)。
但是当我提交表单时,出现此错误: RuntimeException SplFileInfo::getSize(): stat failed for /Applications/MAMP/tmp/php/phpRUJfMX
错误信息详细信息: 打开:/Applications/MAMP/htdocs/nameOfMyProject/vendor/laravel/framework/src/Illuminate/Validation/Validator.php
看来,Laravel 需要(stat - 提供有关文件的信息),也就是说,需要从上传的文件中获取信息,这里是大小,但我在我的控制器中尝试这个,就在 $uploaded 的行之前我将文件移动到我选择的文件夹中的位置:
但是,当我这样做时,我遇到了另一个错误:验证器不会将文件识别为图像** 并要求我上传有效格式。我想我需要纠正我遇到的第一个错误(SplFileInfo::getSize())
如果您有任何想法...谢谢。
php - 如何在读取 CSV 的 PHP SplFileObject 中支持非标准字符
我有一个读取 CSV 文件的简短脚本,如下所示:
这工作正常,除了一些非标准字符有问题。CSV中有一些德语单词,我的具体问题是变音符号有困难。它输出的行类型的一个示例是:
Jürgen 中的ü被替换为¦字符。
我之前尝试过输入以下代码:
但它没有任何效果。
在 Vi 中打开 csv 文件显示 ü 成功,因此文件在服务器上是正确的。
谁能建议 PHP 在解析 CSV 时如何成功处理德语字符?
php - SPLFileObject 的 PHP mkdir
我正在尝试使用以下代码基于 TXT 文件创建 n 个目录:
我期望的是 mkdir 根据我在 Artists.txt <- $line 中的每一行分配一个名称文件夹,但是创建的目录没有名称,我不明白为什么 mkdir 不将 $line 作为字符串。
有任何想法吗?
php - 在php中加载“文件vs SplFileObject”的巨大文件
我正在尝试读取一个包含 700 万行的文本文件,特此命名为 HUGE。我正在尝试阅读前 10000 行,然后将其删除。我目前正在使用这样的 SplFileObject ...
我还没有巨大的。我需要知道 SplFileObject 是否可以加载这么大的文件。每次从中删除行时,我都需要计算 HUGE 的长度。“文件”似乎很有希望,因为 count(array_HUGE) 会立即给我长度。我现在需要做出设计决定。两者中哪一个的占用空间更小,加载 HUGE 的速度更快?
php - SplFileObject + LimitIterator + 偏移量
我有两行的数据文件(两行仅用于我的示例,实际上,该文件可以包含数百万行)并且我使用带有偏移的 SplFileObject 和 LimitIterator。但是这种组合在某些情况下会有奇怪的行为:
输出为:01
但是将$offset设置为1,输出为空白(foreach 不会迭代任何行)。
我的数据文件包含以下内容:
我做错了什么?
谢谢
php - PHP - SplFileObject - 使用 seek() 方法时第二行的错误输出
转到更新以阅读现在的实际问题。Bert Peters 提交的第一个答案已经解决了旧问题。
老问题: 我有几个名为 file.1.txt、file.2.txt、file.3.txt 的文件……我正在使用 SplFileObject 读取第一个文件并使用 foreach 循环遍历其内容:
其他文件可能会被读取,也可能不会被读取,这取决于我正在读取的第一个文件的内容。在所有情况下,都应该只有一个文件(file.2.txt 或 file.3.txt)可以在下一步中使用。所以在 foreach 循环中的某个地方有 if 语句来处理这个问题。
所有文件都具有相同的结构,因此出现了问题。我不想创建新的 foreach 来读取下一个文件 - 正如我所写的那样,它可能根本不需要,所以我想使用现有的 foreach 而不是编写新的。是否有可能用其他文件的内容覆盖 $file 变量并仅使用一个 foreach 或任何其他循环对其进行迭代?例如:
我不想用goto
语句来解决这个问题。递归似乎是合适的解决方案,但如果有办法动态更改循环中的对象,我更喜欢这个解决方案。
更新: 如“老问题”中所述,所有使用的文件(file.1.txt、file.2.txt、...)都具有相同的结构,所以我不想编写更多相同的循环并复制代码. 相反,我使用了来自@Danack 的代码(他在 SO 聊天中建议),这已经是解决方案的一部分。这是无需任何升级即可读取更多文件的基本代码:
因此,此代码可以正常工作并按预期输出文件的行。问题是当我想用 seek() 方法读取文件的下一行时,因为我想对附加到下一行的一些信息做出决定。因此,如果我使用 seek($rowKey + 1) 帮助我获取下一行数据(我在行更改时使用 $file->current() )然后我调用 seek($rowKey) 到上一行,然后下一个文件将输出第一行两次,第二行将被遗漏。第三行以及之后的所有内容都打印得很好。这是通过以下代码实现的问题:
如果您应用自定义 .csv 文件(至少有五个非空行)而不是 file.1.txt 和 file.2.txt,您将看到第二个和第三个输出是相同的(第二个和第三个输出是第一个和file.2.txt 的“第二”行)。这里有什么问题?
php - 为什么这会打印最后一行?(SplFileObject)
fgets() 不会跳到文件的下一行吗?如果是这样,为什么文件仍然通过第二个 !$file1->eof() 语句?这也发生在 ->valid() 上。